声明泛型函数和声明泛型函数类型之间的区别是什么

时间:2016-11-24 12:43:53

标签: typescript

我有两个使用泛型函数的例子:

function genericFunction<TFunction extends Function>(target:TFunction): string {
    return target.toString();
}

根据this answer,这是通用函数声明。

然后这个:

declare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void;

根据this answer,这是泛型函数的类型声明。

我似乎无法理解每个人的使用时间。有人可以提供两者的用法示例吗?

1 个答案:

答案 0 :(得分:2)

第一个是泛型​​函数,它接收一个属于泛型约束类型的参数 它是一个简单的js函数,它将是已编译的js的一部分。

第二个是泛型函数类型的type alias,例如以下函数匹配此类型:

let fn1: ClassDecorator = function<T extends Function>(target: T): void {
    // ...
}

let fn2: ClassDecorator = function<T extends Function>(target: T): T {
    // ...
}

该类型仅在打字稿中,它不会出现在已编译的js中。