TypeScript基础入门 - 泛型 - 泛型类型

转载node

TypeScript基础入门 - 泛型 - 泛型类型

项目实践仓库git

https://github.com/durban89/typescript_demo.git
tag: 1.3.2

为了保证后面的学习演示须要安装下ts-node,这样后面的每一个操做都能直接运行看到输出的结果。github

npm install -D ts-node

后面本身在练习的时候能够这样使用typescript

npx ts-node 脚本路径

泛型

泛型类型

上一篇文章的分享,咱们建立了identity通用函数,能够适用于不一样的类型。 在此次分享中分享一下函数自己的类型,以及如何建立泛型接口。泛型函数的类型与非泛型函数的类型没什么不一样,只是有一个类型参数在最前面,像函数声明同样,以下npm

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

let otherIdentity: <T> (arg: T) => T = identity;

咱们也可使用不一样的泛型参数名,只要在数量上和使用方式上能对应上就能够,以下ide

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

let other1Identity: <U> (arg: U) => U = identity;

咱们还可使用带有调用签名的对象字面量来定义泛型函数,以下函数

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

let other2Identity: { <U>(arg: U): U } = identity;

这引导咱们去写第一个泛型接口了。 咱们把上面例子里的对象字面量拿出来作为一个接口,以下学习

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

interface GenerateIdentityFunc {
    <U> (arg: U): U;
}

let other3Identity: GenerateIdentityFunc = identity;

一个类似的例子,咱们可能想把泛型参数看成整个接口的一个参数。 这样咱们就能清楚的知道使用的具体是哪一个泛型类型(好比: Dictionary<string>而不仅是Dictionary)。 这样接口里的其它成员也能知道这个参数的类型了。spa

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

interface GenerateIdentityFunc1<U> {
    (arg: U): U
}

let other4Identity: GenerateIdentityFunc1<number> = identity;

注意,咱们的示例作了少量改动。 再也不描述泛型函数,而是把非泛型函数签名做为泛型类型一部分。 当咱们使用 GenerateIdentityFunc1的时候,还得传入一个类型参数来指定泛型类型(这里是:number),锁定了以后代码里使用的类型。 对于描述哪部分类型属于泛型部分来讲,理解什么时候把参数放在调用签名里和什么时候放在接口上是颇有帮助的。code

除了泛型接口,咱们还能够建立泛型类。 注意,没法建立泛型枚举和泛型命名空间。


本实例结束实践项目地址

https://github.com/durban89/typescript_demo.git
tag: 1.3.3
相关文章
相关标签/搜索