2016-11-25 65 views
1

我有以下功能:驗證函數簽名 - 接口VS類型別名

function (n: number) { 
    return {s: n}; 
} 

我需要創建的簽名驗證。從我讀過,我有兩個選擇:

接口

interface ValidatorFnInterface { 
    (n: number): { 
     [key: string]: any; 
    }; 
} 

類型別名

type ValidatorFnType = (n: number) => { 
    [key: string]: any 
}; 

他們可以這樣使用:

let f1: ValidatorFnInterface = function (n: number) { 
    return {s: n}; 
}; 

let f2: ValidatorFnType = function (n: number) { 
    return {s: n}; 
}; 

Typescript lib.d.ts似乎在使用類型別名,而angular2代碼似乎在使用接口。我的問題是什麼時候用什麼?在決定時是否應該使用任何邏輯,還是偏好問題?

回答

3

目前班打字稿只能實現interfaces不是任意的類型。所以一般來說,如果你希望其他類能夠使用你的類型來實現,你應該使用接口。同樣可以只接口extend其他接口。

有關爲接口消極的一面,他們無法表達路口或聯合類型,所以如果你想在一個單一類型你堅持類型別名。

+0

謝謝,所以你說你會堅持接口函數簽名驗證? –

+0

@Maximus這取決於您的要求。我個人喜歡用類型別名來表示我的類型,因爲它感覺更乾淨。但接口可能更安全,更可重用。 – Alex

+0

謝謝。語言中的類型別名是否比接口出現更晚?也許這就是爲什麼angular2使用接口的原因。另外,你可以說[this](http://stackoverflow.com/questions/13137350/defining-typescript-callback-type#comment47535906_14249517)評論? –