ボイラープレートを減らすために、ある種の汎用関数インターフェイスを型として宣言しています。次に、そのようなタイプのconst
を宣言したいと思います。では、TypeScriptがfoo
宣言を正当であると見なし、bar
を正当ではないと見なす理由は何でしょうか。これらの宣言は実質的に同一ではありませんか? TypeScriptには単純な機能が不足していますか、それとも詳細が不足していますか? FunctionType
インターフェイスを明示的に繰り返したくない場合、回避策はありますか?
type FunctionType<TValue> = (value: TValue) => void;
const foo = <TValue>(value: TValue): void => {
}
//const bar: FunctionType<TValue> = (value) => { // Cannot find name 'TValue'
//}
関数であるジェネリック型とジェネリック関数である型には違いがあります。
そこで定義したのは、関数であるジェネリック型です。これは、ジェネリック型が指定されているconstにこれを割り当てることができることを意味します。
type FunctionType<TValue> = (value: TValue) => void;
const bar: FunctionType<number> = (value) => { // value is number
}
ジェネリック関数である型を定義するには、引数リストの前に型パラメーターを置く必要があります
type FunctionType = <TValue>(value: TValue) => void;
const bar: FunctionType = <TValue>(value) => { // generic function
}