美文网首页
typescript

typescript

作者: 吐司番茄 | 来源:发表于2019-07-08 21:46 被阅读0次

    title: typescript学习
    tags: typescript学习


    [toc]

    泛型


    基本使用

    function loggingIdentity<T>(arg: Array<T>): Array<T> {
        console.log(arg.length);  // Array has a .length, so no more error
        return arg;
    }
    
    第一个T提供了泛型参数(使用时候填写进去就好。就规定了这个函数的参数约束和返回值)
    第二个T定义了参数的约束。为某种类型的数组。如果是直接为某种类型只要arg:T就好了。或者也可以用T[]来定义它为某种类型的数组。
    第三个T定义了返回值的类型。
    
    两种使用方法:
    1. let output = identity<string>("myString");
    2. let output = identity("myString");(根据编译器自行判断)

    泛型类


    class GenericNumber<T> {
        zeroValue: T;
        add: (x: T, y: T) => T;
    }
    
    let myGenericNumber = new GenericNumber<number>();
    myGenericNumber.zeroValue = 0;
    myGenericNumber.add = function(x, y) { return x + y; };
    

    注意:静态属性不能使用泛型

    泛型约束

    class BeeKeeper {
        hasMask: boolean;
    }
    
    class ZooKeeper {
        nametag: string;
    }
    
    class Animal {
        numLegs: number;
    }
    
    class Bee extends Animal {
        keeper: BeeKeeper;
    }
    
    class Lion extends Animal {
        keeper: ZooKeeper;
    }
    
    function createInstance<A extends Animal>(c: new () => A): A {
        return new c();
    }
    
    createInstance(Lion).keeper.nametag;  // typechecks!
    createInstance(Bee).keeper.hasMask;   // typechecks!
    

    规定泛型输入的T的要求

    类型推论

    let x = [0, 1, null]; 会得出x
    这里有两种选择: number和null。 计算通用类型算法会考虑所有的候选类型,并给出一个兼容所有候选类型的类型。

    let zoo = [new Rhino(), new Elephant(), new Snake()];
    由于最终的通用类型取自候选类型,有些时候候选类型共享相同的通用类型,但是却没有一个类型能做为所有候选类型的类型
    let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];
    这里,我们想让zoo被推断为Animal[]类型,但是这个数组里没有对象是Animal类型的,因此不能推断出这个结果。 为了更正,当候选类型不能使用的时候我们需要明确的指出类型:
    如果没有找到最佳通用类型的话,类型推断的结果为联合数组类型,(Rhino | Elephant | Snake)[]。

    相关文章

      网友评论

          本文标题:typescript

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