You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:15:04