TypeScript 学习记录–类型
1. 布尔值 boolean
2. 数值 number
3. 字符串 string
4. 数组
number[] | string[]
表示由 ‘number | string ’ 组成的数组; 数组泛型Array[number]
也可以表示
5. 元祖 Tuple
表示一个已知元素数量和类型的数组,当访问已知索引时,会得到正确的类型,然后根据类型决定报错
const a: [number, string] = [12, '12'];
a[1] = true; // 赋值操作不符合类型也会报错
console.log(a[0] * 20 + 10); // 正确
console.log(a[1] * 20 + 10); // 报错
6. 枚举 enum
一个枚举类型可以包括 0 个或者多个枚举成员,枚举成员默认具有一个从 0 开始 每个成员递增 1 的数字值,也可以手动设置值
enum Color {Green = 2, Red, XXX}; // 首位赋值为 2 二位开始依次递增 1
const a: string = Color[3]; // 'Red'
7. any
代表所有类型,如果在编译阶段还没有确定类型,则可以使用 any 来标记
let a: any = 'xxx';
a = true; // 不报错
const b: any[] = ['xxx', true];
b[0] = {name: 'name'}; // 更改成员类型也不报错
8. void
与 any 相反,代表没有任何类型 只能后赋值 undefined
9. null | undefined
null 与 undefined 也是类型, --strictNullChecks 开启严格审查的情况下,null 与 undefined 只能赋值给自身
10. never
代表会抛出异常的函数的返回值
function change(): never {
throw new Error('xxx')
}
11. object
对象类型,可以付任意的值,但是不允许调用任意的方法
const a: object = {say: function () {}, name: 'a'};
a.say();
a.name // 报错,object 上没有 say 方法
12. 类型断言
类似于以上 object 的情况,如果我知道这个变量的值是更准确的,那么可以用类型断言告诉 ts 这个位置的类型,而不是让 ts 自己去计算
const a: object = {say: function () {}, name: 'a'};
(a as any).say(); // as 在 tsx 中也被允许
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length; // 非 tsx 环境适用