【发布时间】:2020-04-06 16:46:33
【问题描述】:
我有两个打字稿类。一个扩展另一个:
type NamedObject = {
name: string;
}
class AnyObjectManager {
objectList = [];
getAnyObject = (matches: (o: object) => boolean) => {
for (const o of this.objectList) {
if (matches(o)) {
return o;
}
}
return null;
}
}
class NamedObjectManager extends AnyObjectManager {
getObjectNamedTim = () => {
return this.getAnyObject(this.objectIsNamedTim)
}
objectIsNamedTim = (namedObject: NamedObject) => {
return namedObject.name === 'Tim';
}
}
在NamedObjectManager.getObjectNamedTim方法中,typescript显示错误:
TS2345:'(namedObject: NamedObject) => boolean' 类型的参数不可分配给'(o: object) => boolean' 类型的参数。
参数“namedObject”和“o”的类型不兼容。
“{}”类型中缺少属性“名称”,但在“NamedObject”类型中是必需的。
现在,我知道 NamedObjectManager 只会管理 NamedObjects。假设像 addObject 这样的函数确保只有 NamedObjects 会出现在这里。那么,我怎样才能告诉 typescript 所有由 NamedObjectManager 管理的对象都是 NamedObjects,并且我们可以在从父级继承的方法中安全地假设这一点?
【问题讨论】:
标签: typescript class inheritance callback