TS : typescript 类型注解

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

  • 默认情况下nullundefined是所有类型的子类型。 就是说你可以把 nullundefined赋值给number类型的变量。

8. never

  • 表示哪些永不存在的值,例如, never类型是那些总是会抛出异常或没有返回值的函数类型; 变量也可能是 never类型,当它们被永不为true的类型保护所约束时。

    never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never

    扫描二维码关注公众号,回复: 12700914 查看本文章
    // 返回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;
    
    

猜你喜欢

转载自blog.csdn.net/yivisir/article/details/109532645