TypeScript 类型推断、断言及别名大全
2023-11-29 01:01:34
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
。
非空断言
非空断言可以用来断言一个变量肯定不是 null
或 undefined
。比如,我们可以使用 !
操作符来将变量 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
,而不是 number
或 string
。