指示一个类以动态方式分配属性的打字稿

时间:2016-10-21 07:10:07

标签: typescript

我有一个简单的类定义,如下所示:

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'] 表单访问这些媒体资源。

1 个答案:

答案 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 });

但无论如何我会建议第一种方法。