我有一个简单的类定义,如下所示:
class Model {
constructor(props?:{}) {
_extend(props, this);
}
}
构造函数接受一个对象作为参数,并将其属性复制到某个地方定义了_extend
函数的实例。
我的问题是,当我尝试访问时,Typescript会抱怨类定义中没有定义的属性。
let model = new Model({id: 1, name: 'coyote'});
model.id; // Property 'id' does not exist on type Model
有没有办法告诉 TypeScript 这个特定的类可以具有未在类中定义的属性?
目前,我正在使用测试文件中的 instance['prop_name']
表单访问这些媒体资源。
答案 0 :(得分:3)
您可以使用工厂方法考虑替代方案:
class Model {
private constructor(props?: any) { }
static create<T>(props?: T): T & Model {
return new Model(props) as T & Model;
}
}
let model = Model.create({ a: 123 });
如果你对一个看起来很糟糕的课程定义很好,你可以试试这个:
class ModelClass {
constructor(props?: any) { }
}
type ModelStatic = {
new <T>(props?: T): ModelClass & T;
} & typeof ModelClass;
const Model: ModelStatic = ModelClass;
type Model = ModelClass;
let model = new Model({ foo: 123 });
但无论如何我会建议第一种方法。