我对通用属性有一些问题。并为它提供一些解决方案。关于以下代码,您可以提出其他解决方案吗?
interface IConfig{
property?: number;
}
interface IChildConfig extends IConfig{
otherProperty?: number;
}
class Base<T extends Base<any, IConfig>, U extends IConfig>{
protected _config: U | IConfig = {
property: 10
};
public config(){
return <U>this._config;
}
}
class Child extends Base<Child, IChildConfig>{
protected _config: IChildConfig = {
property: 20,
otherProperty: 10
}
}
let a = new Child(),
b = new Base();
a.config();
b.config();
在示例中,我将_config属性类型设置为U | IConfig避免错误。 如果我删除&#34; |配置&#34;零件编译器会引发错误。 据我所知,类型U必须相等或扩展IConfig接口。
答案 0 :(得分:2)
如果您将_config
设置为U
,那么现在无法使用TypeScript _config
的类型是否正确,因为这取决于U
实际是什么。在JavaScript中也没有属性重载这样的东西。
解决方案取决于您真正想要实现的目标,但这可行:
abstract class Base<T extends Base<any, IConfig>, U extends IConfig>{
abstract config(): U;
}