我正在查看lib.d.ts
文件,其中包含以下内容:
declare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void;
我不太懂语法。有人可以帮忙吗?
我理解的是声明了新类型ClassDecorator
。此类型从函数扩展。但这是什么:<TFunction extends Function>
?为什么在那里使用箭头?
答案 0 :(得分:2)
它声明了generic函数的类型,其基本形式为
<T>(target: T) => T | void;
实施例
type MyFuncType = <T>(target: T) => T | void;
var myFunc: MyFuncType = <T>(target: T) => {
return target;
}
var stringOrVoidResult = myFunc<string>("test");
var numberOrVoidResult = myFunc<number>(123);
TFunction extends Function
表示您在使用泛型函数时声明的类型必须是Function
类型,所有类都是。
实施例
class Animal {
Eat: () => void;
Sleep: () => void;
}
type MyFuncType = <T extends Animal>(target: T) => T | void;
var myFunc: MyFuncType = <T>(target: T) => {
return target;
}
var stringOrVoidResult = myFunc<string>("test"); // Error, string is not a subtype of Animal
var numberOrVoidResult = myFunc<number>(123); // Error, number is not a subtype of Animal
class Dog extends Animal {
}
var dogOrVoidResult = myFunc<Dog>(new Dog()); //Ok, Dog is Animal
在上面的示例中,您实际上不必指定函数的泛型类型,因为编译器可以从输入参数中理解该函数。虽然情况并非总是如此。
var stringOrVoidResult = myFunc("test");
var numberOrVoidResult = myFunc(123);
var dogOrVoidResult = myFunc(new Dog());