如何在 Typescript 中按预期完成以下工作?
export class ProxyObject<T> {
private _dataObject:T;
constructor(dataObject?:T) {
if (dataObject) {
this.dataObject = dataObject;
} else {
//create a new instance of the generic <T> here
this.dataObject = <T> new Object();
}
}
set dataObject(dataObject:T) {
this._dataObject = dataObject;
}
get dataObject():T {
return this._dataObject;
}
}
export class ClassA {
myCoolProperty = "My Cool Property";
}
当我执行以下操作时:
export class MyObject extends ProxyObject<ClassA> {
}
进而:
var obj = new MyObject();
obj.dataObject.myCoolProperty === undefined
正如我所期望的那样,MyObject 内的 dataObject 上不存在 ClassA 属性或函数。例如,我期望 dataObject 具有 myCoolProperty。
我正在尝试编写一个 ProxyObject 类,扩展时它的 DataObject 存储将被键入为通用类型。
Thanks!!
由于打字稿泛型是使用类型擦除来实现的,因此运行时 T 不存在,因此您可以将该类作为参数传递给基类构造函数,然后使用它来创建新对象。
export class DataObjectBase {
}
export class ProxyObject<T extends DataObjectBase> {
private _dataObject: T;
constructor(dataObject?: T, cls?: typeof DataObjectBase) {
if (dataObject) {
this.dataObject = dataObject;
} else {
//create a new instance of the generic <T> here
this.dataObject = <T> new cls();
}
}
set dataObject(dataObject: T) {
this._dataObject = dataObject;
}
get dataObject(): T {
return this._dataObject;
}
}
export class ClassA {
myCoolProperty = "My Cool Property";
}
export class MyObject extends ProxyObject<ClassA> {
public constructor(dataObject?: ClassA) {
super(dataObject, ClassA);
}
}
new MyObject();
obj.dataObject.myCoolProperty !== undefined
这种方法仍然需要派生类中的一些代码,但至少它保留了基类中的所有逻辑
DataObjectBase 类是必要的,因为如果我使用 typeof Object 代替,ClassA 就无法满足 Object 类的签名(因为 ClassA 没有 Object 所具有的构造函数)。 DataObjectBase 是一个具有单个构造函数且不带参数的类,ClassA 尽管没有显式派生自它,但仍满足该构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)