我知道这个问题比较泛化,但是我希望创建一个类,该类具有来自类似于以下通用类型的所有属性和原型:
class GenericExtend<T> extends T {
constructor(data: T) {
// here is a workaround to make these 2 classes unique
const proto = { ...GenericExtend.prototype };
Object.assign(proto, Object.getPrototypeOf(data));
Object.setPrototypeOf(this, proto);
Object.assign(this, data);
}
GenericMethod() { }
}
从现在开始,我可以实例化GenericExtend
类并像这样获取两个类的类型:
const obj = new GenericExtend<Model>(data);
obj.GenericMethod(); // ok
obj.ModelMethod(); // good!
我的解决方案之一是使用交集,类似于这样:
使用交集的方法之一是这样的:
const obj: GenericExtend & Model = new GenericExtend(data) as any;
它能够工作,但我并不是很喜欢。有更好的选择吗?
instanceof
或类原型属性。这些东西需要在GenericExtend
构造函数的实现中解决...我不相信自己能写出来。如果您的用例是扩展类,则听起来您可能正在寻找mixins。 - jcalzconst GenericExtend = _GenericExtend as new <T>(data: T) => _GenericExtend<T> & T;
- 4-bit