Ich habe eine neue Klasse aus der Basisklasse erweitert und einige Eigenschaften hinzugefügt. Wie erstelle ich eine Instanz einer abgeleiteten Klasse mithilfe einer bestimmten Basisklasse einschließlich angehängter Eigenschaften?
Dieser Code funktioniert, wandelt aber den Klassentyp um und ist nicht typsicher
// 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>