返回

TypeScript 类型推断、断言及别名大全

前端

TypeScript 作为一门强大的静态类型编程语言,以其类型系统而著称,TypeScript 通过类型推断和类型断言等机制,可以帮助我们轻松地捕获并修复类型错误。

类型推断

类型推断是指 TypeScript 编译器根据变量的值来推断其类型。比如,我们可以直接将一个数字赋值给变量 num,而无需显式声明 num 的类型。

let num = 123;

此时,TypeScript 编译器会自动将 num 的类型推断为 number

类型断言

类型断言可以用来强制将一个变量转换为另一种类型。比如,我们可以使用 as 操作符来将变量 num 的类型断言为 string

let str = num as string;

此时,str 的类型为 string,而不是 number

双重断言

双重断言是类型断言的一种变体,它使用两个 as 操作符来将一个变量转换为另一种类型。比如,我们可以使用双重断言将变量 num 的类型断言为 boolean

let bool = num as boolean as boolean;

此时,bool 的类型为 boolean,而不是 number

非空断言

非空断言可以用来断言一个变量肯定不是 nullundefined。比如,我们可以使用 ! 操作符来将变量 obj 的类型断言为 string

let obj = document.getElementById('my-id')!;

此时,obj 的类型为 string,而不是 HTMLElement | null

确定赋值断言

确定赋值断言可以用来断言一个变量在某个时候肯定会被赋值。比如,我们可以使用 ! 操作符来将变量 name 的类型断言为 string

let name!: string;

if (condition) {
  name = 'John Doe';
}

此时,name 的类型为 string,而不是 string | undefined

类型守卫

类型守卫是一种用来检查变量类型的机制。比如,我们可以使用 typeof 操作符来检查变量 num 的类型。

if (typeof num === 'number') {
  // do something
} else if (typeof num === 'string') {
  // do something else
}

类型别名

类型别名可以用来给一个类型起一个别名。比如,我们可以使用 type 来声明一个名为 MyType 的类型别名。

type MyType = number | string;

let myVar: MyType = 123;

此时,myVar 的类型为 MyType,而不是 numberstring