我有两个使用泛型函数的例子:
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,这是泛型函数的类型声明。
我似乎无法理解每个人的使用时间。有人可以提供两者的用法示例吗?
答案 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中。