基础类型
布尔值
1 | let isBoolean: boolean = true or false |
数字
1 | let isNumber: number = 6 // 可赋值null和undefined |
字符串
1 | let age: string = `this ${变量}` |
数组
1 | let list: number[] or Array<number>= [1, 2, 3] // 数值类型的数组 |
元组(Tuple):已知元素数量和类型的数组,各元素的类型不必相同
1 | let x: [string, number] |
枚举
any:允许赋任意值,且可以调用在这个变量上的任意方法,而Object不能调用这些方法
1 | let list: any[] = [1, true, "free"]; |
空值(void): 没有返回值的返回类型
null和undefined: 返回各自类型
- 默认情况下,可以赋值给number
- 指定–strictNullChecks标记,null和undefined只能赋值给void和自己
Never
- 永不存在的值的类型(异常,箭头函数返回值,无返回值的函数表达式,永不为真的变量)
- never可以赋值给其它类型,但除never本身,任意类型都不可以赋值给never
Object
1 | declare function create(o: object | null): void |
类型断言:类型转换
is关键字
- 当一个变量存在多个类型时,编译器识别不出来使用
- eg: 假值判断
1
2export type Falsy = false | '' | 0 | null | undefined;
export const isFalsy = (val: unknown): val is Falsy => !val;
“尖括号”语法: 使用<>指定someValue的类型为string
1 | let someValue: any = "this is a string" |
as语法:使用as指定类型
- 在TS里使用JSX时,只有as语法断言是被允许的
1
let strLength: number = (someValue as string).length
类型推论
- 基础类型,通过值来推出类型: 发生在初始化变量和成员,设置默认参数值和决定函数返回值时
最佳通用类型
- 多个表达式中存在不同类型,需要找到通用的类型
- 有存在共享相同的类型时,可以通过类,继承关系将选项中不存在的值类型获取到
1
let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];
- 如未找到最佳通用类型,类型推断的结果为『联合数组类型』
- (Rhino | Elephant | Snake)[]
上下文类型
- 通过 = 或 : 的左边来推出右边的类型(明确给出类型则忽略推断结果)
- 使用场景: 函数的参数,赋值表达式的右边,类型断言,对象成员和数组字面量和返回值语句。