编辑
2023-03-24
TypeScript
0
请注意,本文编写于 534 天前,最后修改于 515 天前,其中某些信息可能已经过时。

目录

数据类型概览
相关名词解释
类型注解
string类型
说明
常规
模板字符串
number类型
说明
Eg
boolean类型
说明
Eg
静态类型检查Eg
自动的类型判断机制
null和undefined
说明
symbol(ES6引入)
说明
语法
tsconfig配置
注意
相关方法
获取Symbol的描述
当symbol作为对象的属性值时
普通方法遍历
有效的方法
BigInt(ES10引入)
说明
特点
语法
在JSON中使用

数据类型概览

  • 原始数据类型
    • string
    • number
    • boolean
    • null
    • undefined
    • symbol
    • bigint

相关名词解释

类型注解

类型注解是TS中一种轻量的为函数或变量添加约束的方式

string类型

说明

和JS一样使用一对双引号或单引号包裹,也可以使用模板字符串

常规

ts
// 字符串类型约束 let str:string = "a" str='b' console.log(str,typeof(str))

模板字符串

ts
// 字符串类型约束 let age:number = 18 let str:string = `小明今年${age}` console.log(str,typeof(str))

image

number类型

说明

和JS一样,TS中的数字类型也是全部由浮点数表示,且TS支持十进制字面量dec、十六进制字面量hex、二进制字面量bin和八进制字面量oct

Eg

ts
// 数字类型约束 let del: number = 13 //十进制字面量 console.log(del, typeof (del)) let hex:number = 0xD //十六进制字面量 console.log(hex, typeof (hex)) let bin:number = 0b1101 //二进制字面量 console.log(bin, typeof (bin)) let oct:number = 0o15 //八进制字面量 console.log(oct, typeof (oct))

image

boolean类型

说明

采用以下方式声明变量类型

js
let 变量名:boolean = true

Eg

静态类型检查Eg

ts
let a: boolean = true console.log(a, typeof (a))//true 'boolean'

image

自动的类型判断机制

ts
let a = true console.log(a, typeof (a)) a="s"

image

null和undefined

说明

默认情况下,null和undefined是所有类型的子类型,即可以将null和undefined赋值给number类型等

let a1:undefined=undefined let a2:null=null console.log(a1,a2)

在TS中启用严格的空校验(--strictNullChecks)特性,就可以使得null和undefined只能被赋值给void或本身对应的类型

默认启用,需要将注释去掉,然后设为false表示不启用

严格

将TS中严格的空校验(--strictNullChecks)设为关闭,就可以将null和undefined赋值给其它类型,如数字类型。赋值后的类型会变成null或undefined

symbol(ES6引入)

说明

ES6引入的新数据类型,表示独一无二的值

语法

symbol值由Symbol函数生成

ts
let sym:symbol = Symbol()

Symbol函数可以接受一个字符串、对象或数值(TS中不能是对象,若为对象则报错)作为参数,表示对Symbol实例的描述
主要是为了在控制台显示,或者转为字符串时,比较容易区分

ts
let sym:symbol = Symbol("1")

若该参数是一个对象,则会调用该对象的toString方法,将其转为一个字符串然后生成一个Symbol值
JS中才支持传入对象,TS中不支持

js
const obj = { toString() { return 'abc'; } }; const sym = Symbol(obj); // 在ts 不允许的传入对象,js中可以 sym // Symbol(abc)

Symbol函数的参数只是表示对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不相等的

对象的属性名有两种类型:

  • 原本的字符串类型
  • symbol类型,只要采用symbol类型就是独一无二的,此时应使用中括号包裹,否则会被识别为字符串

tsconfig配置

使用es6语法需要加入ES6,使用DOM则需要引入DOM

ts
"lib": ["ES6","DOM"],

注意

  • Symbol函数前不能使用new命令,否则会报错
  • Symbol值不能与其它类型值运算,会报错
  • Symbol值可以显示通过toString转为字符串
  • Symbol 值也可以转为布尔值,但是不能转为数值

相关方法

获取Symbol的描述

  • Symbol.prototype.description
ts
let sym:symbol = Symbol("1") console.log(sym.description) // 1
  • Symbol.keyFor 必须接受Symbol.for()创建的symbol值
ts
const namesSub = Symbol.for("namesSub") console.log(Symbol.keyFor(namesSub)) // 返回标识符"namesSub"

当symbol作为对象的属性值时

普通方法遍历

都无法获取symbol属性

ts
const names:symbol = Symbol("name") const info = { [names]:"小名", age:12, hobby:"hack" } //普通方法无法取到symbol作为的属性名 for (const key in info){ console.log(key)//age hobby } console.log(Object.keys(info)) // ['age', 'hobby'] console.log(Object.getOwnPropertyNames(info)) // ['age', 'hobby'] console.log(JSON.stringify(info)) // {"age":12,"hobby":"hack"}

有效的方法

  • Reflect.ownKeys
ts
console.log(Reflect.ownKeys(info)) //['age', 'hobby', Symbol(name)]
  • Object.getOwnPropertySymbols(info)
ts
console.log(Object.getOwnPropertySymbols(info)) //[Symbol(name)]
  • Symbol.for("name") Symbol.for()方法会首先全局搜索判断是否有对应的symbol值,如果有则返回对应的值,没有则重新创建
ts
console.log(Symbol.for("name")) //Symbol(name)

BigInt(ES10引入)

说明

BigInt可以表示任意大的整数

特点

  • 不能使用Math对象的方法
  • 不能和任何Number实例混合运算,二者必须处于同一类型才可以运算
  • Bigint变量在转换为Number变量时可能会丢失精度,转换时要注意
  • 当使用BigInt运算时,带小数的运算会被取整
  • BigInt类型和number类型不同

语法

  • 在一个整数字面量后面加n的方式定义一个BigInt
ts
<p style="color:red;">直接在数字字面量后面加n在ts中会报错</p>

Bigint报错

  • 调用函数BigInt()
    将数值大的字面量使用引号包裹
ts
let bin:BigInt = BigInt("90071992547409910")

在JSON中使用

对任何BigInt值使用JSON.stringify()都会引发TypeError,默认情况下BigInt值不会在JSON中序列化

本文作者:RKLS

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!