2015-05-11 20 views
3

我見過就說明了func1func2這個打字稿接口上有多種方式聲明的函數,屬性:在TypeScript接口上聲明函數的多種方式:它們有何不同?

interface Thing { 
    func: (arg:string) => number; 
    func2(arg:string): number; 
} 

有沒有兩者之間的區別嗎?有沒有一種情況可以使用一種嗎?

This playground link似乎暗示着兩者可以互換使用。這是否有任何限制?

+0

我的問題的答案http://stackoverflow.com/questions/30056593/visual-studio-shows-wrong-value-for-this-in-typescript/30070859#30070859回答這個相當好。 – Nypan

回答

4

有兩個

之間的差異是的。

func: (arg:string) => number;

這個版本意味着它的屬性。這會限制您在嘗試聲明overloads時。

func2(arg:string): number;

這是首選的功能,因爲這意味着你可以輕鬆地在事後宣佈過載(使用接口的開放式性質)

似乎暗示兩者可以使用可互換

這是因爲他們是類型兼容。並不意味着它們是相同的東西。見性能的關係如下方法:

enter image description here

enter image description here

這應該澄清:

interface Thing { 
    func: (arg: string) => number; 
    func2(arg:string): number; 
} 

interface Thing { 
    // Overload not permitted 
    func: (arg: number) => string; // ERROR! 
    // Overload okay 
    func2(arg: number): string; 
} 
相關問題