美文网首页我爱编程
TypeScript 学习笔记 之 泛型

TypeScript 学习笔记 之 泛型

作者: 一半晴天 | 来源:发表于2018-03-05 22:34 被阅读21次

    泛型函数

    TS 泛型函数示例:

    function identify<T>(arg:T):T{
      return arg;
    }
    

    上面的函数调用时:
    1)显式指定类型: identify<string>("myString")

    1. 自动推断: identify("myString")

    泛型类型:

    1. 写法1:let myIdentify: <T>(arg:T) => T= identify;
    2. 写法2: let myIdentify: {<T>(arg:T):T} = identify;

    泛型接口

    从单函数接口:

    interface GenericIdentifyFn{
       <T>(arg:T):T;
    }
    // 使用
    let myIdentify:GenericIdentifyFn = identify;
    

    到泛型参数是整型接口的泛型。

    interface GenericIdentifyFn<T>{
    }
    // 使用
    let myIdentify: GenericIdentifyFn<number> = identify;
    

    泛型类

    示例如下:

    class GenericNumber<T>{
        zeroValue:T;
        add:  (x:T, y: T) => T;
    }
    let gm = new GenericNumber<number>();
    

    带约束的泛型

    示例:

    interface ActionMenu{
      title:string
    }
    
    function showActionMenus<T extends ActionMenu>(menus:Array<T>){
    }
    

    泛型约束中的类型参数

    示例:

    function getProperty(T, K extends keyof T>(obj:T,key:K){
       return obj[key];
    }
    

    上例中,将 K 限制为 T 对象的属性键名。

    泛型中使用Class 类型

    示例:
    通过 c:{new():T;} 限制参数应该为返回某类型对象的构造函数。

    class Animal{}
    class Dog extends Animal{}
    class Cat extends Animal{}
    
    function createAnimal<A extends Animal>(c: new() =>A):A{
      return new c();
    }
    

    相关文章

      网友评论

        本文标题:TypeScript 学习笔记 之 泛型

        本文链接:https://www.haomeiwen.com/subject/nvjhfftx.html