2016-05-19 16 views
0

は、型推論は、以下のスニペットで完璧に動作します:ジェネリック型が存在するときに型推論が失敗するのはなぜですか?例えば

export type trim = (value: string) => string; 
export const trim: trim = value => value.trim(); 

コンパイラが正しく予想通り型「string」として無名関数に引数「値」を特定します。しかし、私は、ジェネリック型は、以下のスニペットのように導入されたときに同じことが真実ではないことに気付きました:

export type identity = <T>(value: T) => T; 
export const identity: identity = <T>(value: T) => value; 

私は関数定義から型注釈を削除した場合、コンパイラは、引数「値」を前提としてい私はそれがあるタイプの "T"を解決することを期待するとき、 "any"のタイプを持っています。私は関数の定義から型の注釈を削除し、コードの明快さのために関数の上に書くことができるようにしたいと思います。ジェネリックがTypeScriptに存在する場合、これは可能ですか?

答えて

1

これは分解しません。あなたは恒等式としてconst identityをタイプしました。ラムダではありません。作成したラムダは、適切にはany => anyです。一旦割り当てたら、あなたが探しているタイプに特化したものになります。

しかし、あなたはアイデンティティ定数を調べる場合は型情報は、実際にある<T>(value: T) => T;

export type identity = <T>(value: T) => T; 
export const identity: identity = (value) => value; 

let test:string = identity(4) 

コンパイラは

エラーTS2322で失敗し、最後の行になります:タイプ「番号」タイプ '文字列'に割り当てることはできません。

+0

まあ、私は気になるだろう、それを試みるとは思わなかった。ありがとう! – patrickjtoy

関連する問題