字符串类型
let str: string = '123' let str: string = 123 //error
数字类型
let num1:number =NaN let num2:number =Infinity // 无穷大 let num3:number = 101010 // 二进制 // 也支持 16 10 8 进制
布尔类型
let b1: boolean = true let b2: boolean = Boolean(1) // 可以通过函数返回布尔值
Null 和 undefined类型
- 可以穿插使用,但是一般不这么写
let a: null = undefined
let b: undefined = null
void类型
- 代表空值类型,不能赋值,也不能有返回值,void 可以声明 null 和 undefined ,但是不能赋值
let a: void = null let b: void = undefined
- 变量赋值
let v: void = undefined let u: undefined = undefined let str = '123' str = v // 报错 str = u //ok
- 定义函数
function fn(): void { return 'xxx' }
- 如果在定义null的时候报错,查看是否开启了 严格模式
unknown 和 any类型
- unknown 可以赋值任何类型
let b: unknown = '嘻嘻嘻嘻' b = 1 b = '1' b = true b = {} b = [] b = Symbol(123)
- any 可以赋值任何类型 同上
- 两者的区别
- unknown 类型 比 any 类型 更安全
- unknown 是不可以使用任何属性和方法的 any 是可以的
let u: unknown = { name: '盲仔' } u.a // error let u: unknown = { a: (): string => 'xxx' } u.a() // error let u: any = { name: '亚索' } u.a // ok let u: any = { a: (): string => 'eee' } u.a() // ok
数组类型
元组类型
let list: [string, number] = ['盲仔', 12] // list.push(true) // error 因为没有定义 boolean类型 list.push(123)
枚举类型
Never类型
- 表示一个状态不存在
- 一般用到的场景
- 抛出异常
- 这个函数 没有返回值,一进这个函数就会抛出异常 所以定义成 never类型
function fn(p: string): never { throw new Error(p) }
- 死循环
- 死循环,所以 fn1 将不会有返回值
function fn1(): never { while (true) {} }
- 抛出异常