2012-10-31 70 views
6
interface test{ 
    foo(boo:string); 
} 
class coo implements test{ 
    foo(){ 

    } 
} 

功能簽名playGround 雖然功能簽名不是作爲接口 說,這不會產生和錯誤,接口的預期的行爲是強迫簽名..TS接口不強迫實施者

爲什麼這種行爲?

謝謝

回答

3

這很有趣。 TypeScript團隊非常聰明,他們決定故意這樣做。

的想法是,如果你的函數可以在不被傳遞參數正常運行,它可以安全地忽略參數,並滿足該接口。這意味着你可以替代你的實現而不必更新所有的調用代碼。

接口確保參數傳遞在所有情況下,你是消費的界面 - 讓您得到的呼叫者類型檢查,它實際上並不重要,你的具體類不需要任何參數。

Interface Function Parameter Not Enforced

+0

我認爲這是太明顯是一個錯誤..等待,如果有人有另外一個答案,然後生病標誌着答案..謝謝 –

+0

更新基於來自打字稿團隊反饋。 – Fenton

+0

謝謝,但對我來說,我寧願有參數檢查,以確保正確的實施,並可以爭辯說,如果我有一個函數a(arg1)不在界面..在一個類可以說..它不會被調用沒有arg1,除非使用'?'不需要arg1。 .. –