如何在TypeScript中使用泛型类型初始化对象?

时间:2018-04-16 12:25:52

标签: typescript typescript2.0

我尝试这样做:

export class MapperObject<V> {
    public obj: V = {};
}

它不起作用。此外,我需要填写像:

这样的对象
this.obj[key] = "1";

如果没有初始化,则会调用错误。

1 个答案:

答案 0 :(得分:1)

简短的回答是,您不能以类型安全的方式执行此操作,因为您不知道所需的V字段。您可以使用类型断言强制初始化,但它并不完全安全:

export class MapperObject<V> {
    public obj: V = {} as any;
}
let m = new MapperObject<{ requiredProp: string }>();
m.obj.requiredProp // undefined even though it is required

安全的解决方案是让构造函数需要传递obj的默认值:

export class MapperObject<V> {         
    constructor(public obj: V) {}
}