それは
<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
の塩基形態でgeneric関数の種類を宣言していますが、あなたが一般的な関数を宣言しているタイプがあることを意味しますそれを使用するときは、すべてのクラスであるタイプ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());
ありがとうございます、あなたは 'の基本形で'を少し詳しく説明できますか?おそらくそのようなタイプの関数の例を表示してください –
@ Maximus今はっきりしていますか? – Alex
理解しようとしています... –