我從基類擴展了一個新類別並添加了一些屬性。 如何使用給定基底類別(包括附加屬性)建立衍生類別的實例?
此程式碼可以工作,但會強制轉換類別類型,並且不是類型安全性
// Base class is imported from a package. Not editable class BaseClass { public x: number; public power() { return this.x * 2; } } export interface CustomClass extends BaseClass { value: number; } function createCustomClass(base: BaseClass, myValue: number): CustomClass { // it's not type safe to cast this variable // How to do it the right way in Typescript? const result: CustomClass = base as CustomClass; result.value = myValue; return result; }
我認為使用您的方法不可能完全排除類型轉換,但是如果您使用
type Guard
檢查變數result
是否有效CustomClass
(在我的實作中是isCustomClass
),那將是安全的: p>您可以使用
Object.assign ()
方法 為目標物件新增屬性。此方法傳回目標對象,以及 其在 TypeScript 函式庫中的呼叫簽名是 輸入類型的交集。這表示你的
createCustomClass()
可以這樣實作:傳回型別為
BaseClass & {value: number}
,其結構與CustomClass
相同,因此函數編譯不會出錯,且不存在需要型別斷言。Playground 程式碼連結 p>#