2016-05-19 56 views
0

例如,類型推斷完美地工作在下面的代碼段:當泛型類型存在時,爲什麼類型推斷會崩潰?

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

編譯器正確地識別在作爲預期的匿名函數類型「字符串」變量「值」。不過,我注意到,當一個泛型類型被引入作爲在下面的代碼片段同樣是不正確的:

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

如果我刪除從函數定義的類型註釋,則編譯器假定參數「值」當我期望它解析一個「T」類型時有一個「任何」類型。我希望能夠從函數定義中移除類型註釋,並將它們寫在函數的上方以便代碼清晰。在TypeScript中使用泛型時可以這樣做嗎?

回答

1

它不分解。您已將「常量」identity鍵入爲身份類型。不是lambda。您創建的lambda適當地爲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的最後一行:類型「號」不能分配給'string'類型。

+0

好吧,我會被詛咒的,沒有想到要嘗試。似乎工作,謝謝! – patrickjtoy