我發現其中一個接口被用來代替一類在我的項目的地方,是這樣的:可以在TypeScript中將數據作爲接口傳遞嗎?
function test(car: ICar) {
//do something
}
this.test({mark: "Volvo", colour: "red"});
它是確定遵循這一做法,還是應該適當班級被改寫?
我發現其中一個接口被用來代替一類在我的項目的地方,是這樣的:可以在TypeScript中將數據作爲接口傳遞嗎?
function test(car: ICar) {
//do something
}
this.test({mark: "Volvo", colour: "red"});
它是確定遵循這一做法,還是應該適當班級被改寫?
該對象是完全可以接受的ICar
(假設它的定義爲我們將推斷的...)。
您不需要僅僅因爲使用TypeScript而使用類 - 它們是類型系統的正交概念,只能在需要時使用。
謝謝你快速回答!雖然這種類型的代碼難以閱讀,比如this.test(new Car(...))IMO應該比this.test({...})更容易閱讀? 我也想知道更改,例如當我更新Car界面時,我將不得不更新所有我啓動它的地方。 – Mikhail
關於使用'new'關鍵字的代碼本質上沒有可讀性。如果你以前只寫過強制OOP語言,這可能有點意外。 –
function test(car: ICar) {
...
}
是功能告訴外面的世界,它只會接受一個對象作爲實現該ICar
接口局部變量car
參數。
沒有接口傳遞到任何地方。
認爲它是一個保鏢,只允許某些輸入。
this.test({mark: "Volvo", colour: "red"});
是測試功能與物體,其可以或可以不履行接口ICar
的呼叫。
檢查打字稿只能在編譯時工作,所以除非你在通過tsc
運行編譯器時沒有看到錯誤,否則它可能沒問題。
請記住,如果在運行時傳遞不同的類型,將不會有檢查,因此代碼可能是錯誤的。
TypeScript使用*結構打字*。只要可以顯示對象,確認它是'該'類型,並被認爲是類型安全的。因此,如果ICar(僅)需要「標記」和「顏色」,則提供的對象(其具有推斷的類型信息)是有效的;而「應該重寫[作爲一個階級]」的問題大多是主觀的,雖然可以提出論據。我的建議是:編寫/設計代碼,以便將來爲您和其他人更容易*更容易地修改*。 – user2864740
例如,可以爲一個具有適當實例的類創建一個參數,例如,如果添加了新的「樣式」(coupe,轎車,掀背車等)屬性,該怎麼辦?使用類可以使用默認值(或通過構造函數強制);只需要進行結構分型,所有的對象都需要更新以符合更新後的ICar--即當只依賴結構化分類時,添加到接口是一個*重大改變*。如果在單元編譯失敗時更新使用地點是可行/可行的,則這種重大更改對於僅限內部類型*而言不一定是壞的。 – user2864740