TypeScript学习
TypeScript 是 JavaScript 的超集。
TypeScript 最大的特点就是类型检查,这和flow很相似,Vue 源码使用 flow 作为类型检查 ,但 React 使用的是 TypeScitpt。
TypeScript 和 ES6 有一些相同的地方,这里不再赘述。
基础类型
基本类型
1 | let isDone: boolean = false; |
注意,基本类型首字母都是小写的。
默认情况下null
和undefined
是所有类型的子类型。就是说你可以把 null
和undefined
赋值给number类型的变量。
元祖Tuple
1 | let x: [string, number]; // 定义一个元祖类型 |
枚举
enum 类型是对JavaScript标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字。
默认从0开始为元素编号,也可以手动的指定成员的数值。
1 | enum Color {Red = 1, Green, Blue} |
Any
any类型包括任意类型。
1 | let notSure: any = 4; |
Void
void类型表示没有任何类型。
1 | function warnUser(): void { |
声明一个void类型的变量作用不大,因为你只能为它赋予undefined
和null
:
1 | let unusable: void = undefined; |
Never
never类型表示的是那些永不存在的值的类型。never类型是任何类型的子类型,且没有类型是never的子类型。
1 | function error(message: string): never { |
类型断言
类型断言好比其它语言里的类型转换,但不进行特殊的数据检查和解构。
1 | let someValue: any = "this is a string"; |
泛型
下面的 identity 函数就是一个泛型。
1 | function identity<T>(arg: T): T { |
给identity
添加了类型变量T
。 T
帮助捕获用户传入的类型,同时也会当做返回值类型。保证参数类型与返回值类型是相同的。 这允许我们跟踪函数里使用的类型的信息。
泛型函数可以有两种使用方法
1 | let output = identity<string>("myString"); |
高级类型
交叉类型
交叉类型是多个类型的交集。
1 | Person & Serializable & Loggable |
联合类型
联合类型是多个类型的并集。
1 | number | string | boolean |