Typescript中如何访问动态泛型类ModelBase的实例属性
问题原因
TypeScript 默认不会将Object.assign动态挂载到实例上的属性识别为类的静态成员。你定义的ModelBase<T>类仅声明了接收泛型参数T的构造函数,没有显式声明实例上存在T对应的属性,因此访问instance.prop时会触发类型报错。
解决方案
最优方案是通过类型断言重写ModelBase的构造函数返回类型,将实例声明为基类与泛型参数T的交叉类型,既保留原类的所有能力,又能继承传入对象的类型提示,不需要修改原有业务逻辑:
export class ModelBase<T> { constructor(base: T) { Object.assign(this, base); } // 重写构造函数类型声明 } as { new <T>(base: T): ModelBase<T> & T; }
如果可以接受牺牲部分类型安全性,也可以通过给基类添加索引签名快速兼容:
export class ModelBase<T> { [key: keyof T]: any; constructor(base: T) { Object.assign(this, base); } }
内容的提问来源于stack exchange,提问作者tris
相关产品推荐
相关产品推荐

