TS : typescript 类型注解
- 在ts中,类型注解是一种为函数或者变量添加约束的方式。
1. 基础的类型
- boolean,number,string
2. 数组
-
ts可以想js一样操作数组元素,定义数字有两种方式。
let list : number[] = [1,2,3]; //or let list : Array<number> = [1,2,3];
3. 元组
-
元组类型表示允许数组内的类型各不相同,但是在赋值时需要按照类型顺序来赋值。
let list : [string , number]; x = ['hello', 24]; // true x = [20 , 'hello']; // false
访问元组内元素时,也要注意类型顺序:
console.log(x[0].substr(1)); //true console.log(x[1].substr(1)); //false,number类型没有这个方法
当访问一个跨界元素时,会使用联合类型进行替代,但不能尝试赋值已有类型以外的:
x[3] = 'world'; // ok,string is allowed x[3] = true; // false,boolean不在这个元组内
4. 枚举
-
enum类型时对js的一个补充,利用枚举可以为一组数值赋予名字。一般地,枚举从0开始赋值,可以手动让其从其他数字进行赋值,也可以全部手动赋值。
enum Color {red,green,blue}; // 从0开始 let r : Color = Color.red; enum Color {red = 1,green,blue}; // 从1开始 enum Color {red = 1,green = 4,blue = 2};
枚举还有一个遍历,可以由枚举的值找到对应的名字。
enum Color {red,green,blue}; let colorname : string = Color[0]; console.log(colorname); // 'red'
5. Any
-
any可以为一些还未确定是什么类型的变量进行标记。
let notsure : any[] = [1,'hello',true];
与Object的区别:Object类型的变量只是允许你可以在上面任意赋值,但是却不能调用对应类型的方法。
let notsure : any = 1; notsure.toFixed(); //ok let notsure : Object = 1; notsure.toFixed(); //error,property 'toFixed' does not exist.
6. void
-
void与any相反,表示没有任何类型,常用于返回值为void的函数
function warning() : void { console.log('warning!'); }
7. null和undefined
- 默认情况下
null
和undefined
是所有类型的子类型。 就是说你可以把null
和undefined
赋值给number
类型的变量。
8. never
-
表示哪些永不存在的值,例如,
never
类型是那些总是会抛出异常或没有返回值的函数类型; 变量也可能是never
类型,当它们被永不为true
的类型保护所约束时。never
类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never
的子类型或可以赋值给never
类型(除了never
本身之外)。 即使any
也不可以赋值给never
。// 返回never的函数必须存在无法达到的终点 function error(message: string): never { throw new Error(message); } // 推断的返回值类型为never function fail() { return error("Something failed"); } // 返回never的函数必须存在无法达到的终点 function infiniteLoop(): never { while (true) { } }
9. Object类型
-
object类型表示非原始类型,是除以上类型以外的类型,使用这种类型可以更好地表示Object.create这样API。
declare function create(o: object | null): void; create({ prop: 0 }); // OK create(null); // OK create(42); // Error create("string"); // Error create(false); // Error create(undefined); // Error
10. 类型断言
-
类型断言类似于类型转换,但是不进行特殊的数据检查和解构。
let someValue: any = "this is a string"; let strLength: number = (<string>someValue).length; // or let someValue: any = "this is a string"; let strLength: number = (someValue as string).length;