TypeScript笔记[5]泛型+Dictionary 转

TypeScript笔记[5]泛型

 

在C++、C#、Java等主流编程语言中,一般对泛型编程提供了支持。合理利用泛型,可以提高开发效率、提升代码质量。

例如在C++编程语言中,常常利用下面的结构表示一个链表的结点:

template<typename T>
struct Node
{
    T data;
    Node *next;
};

在TS中,也提供了泛型的支持。下面介绍一下TS中的泛型函数与泛型类。

一、泛型函数

function Func<T>(a: T): T { return a; } 

上面的代码中,<T>表示一个预设的类型,当Func<T>接受一个具体的参数时,会根据参数的类型产生对应版本的函数。例如,在Func(1)中Func<T>会作为:

function Func(a: number): number { return a; } 

而在Func("魏晋风度")中Func<T>会作为:

function Func(a: string): string { return a; } 

二、泛型类型

变量的类型也可以是泛型的:

function identity<T>(arg: T): T { return arg; } var myIdentity: <U>(arg: U) => U = identity; 

三、泛型类

泛型函数将<T>放在函数名之后,泛型类的<T>也放在类型之后。我们来看一个来自官网的例子:

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

这个例子中,用number将一个泛型类实例化。

interface IDictionary {
    add(key: string, value: any): void;
    remove(key: string): void;
    containsKey(key: string): bool;
    keys(): string[];
    values(): any[];
}

class Dictionary {

    _keys: string[] = new string[];
    _values: any[] = new any[];

    constructor(init: { key: string; value: any; }[]) {

        for (var x = 0; x < init.length; x++) {
            this[init[x].key] = init[x].value;
            this._keys.push(init[x].key);
            this._values.push(init[x].value);
        }
    }

    add(key: string, value: any) {
        this[key] = value;
        this._keys.push(key);
        this._values.push(value);
    }

    remove(key: string) {
        var index = this._keys.indexOf(key, 0);
        this._keys.splice(index, 1);
        this._values.splice(index, 1);

        delete this[key];
    }

    keys(): string[] {
        return this._keys;
    }

    values(): any[] {
        return this._values;
    }

    containsKey(key: string) {
        if (typeof this[key] === "undefined") {
            return false;
        }

        return true;
    }

    toLookup(): IDictionary {
        return this;
    }
}
var persons = new PersonDictionary([
    { key: "p1", value: { firstName: "F1", lastName: "L2" } },
    { key: "p2", value: { firstName: "F2", lastName: "L2" } },
    { key: "p3", value: { firstName: "F3", lastName: "L3" } }
]).toLookup();

 

转载于:https://www.cnblogs.com/niconico/p/5056277.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值