【发布时间】:2020-05-02 11:47:19
【问题描述】:
class SuperClass { ... }
class SubClass1 extends SuperClass { ... }
class SubClass2 extends SuperClass { ... }
class SubClass3 extends SuperClass { ... }
const foo: ??? = ...
对于foo,我想给出一个表示foo 是扩展SuperClass 的任何类的实例的类型。我知道我可以使用联合类型并列出所有子类,但必须有更好的方法。不知何故使用extends 或怎么做?
更新:
之所以问这个是因为我有这个问题:
type SomeType = { foo: SuperClass };
public someMethod<T extends SuperClass>() {
const bar: SomeType = ... ;
const someSet: Set<T> = new Set();
someSet.add(bar.foo);
“SuperClass”类型的参数不能分配给类型参数 'T'。 “SuperClass”可分配给“T”类型的约束,但“T” 可以用不同的约束子类型实例化 '超类'。
嗯..也许我应该把Set<T>改成Set<SuperClass>。
【问题讨论】:
-
父类没有的子类有什么独特之处吗?为什么不希望传递父类?
-
是的,有些方法只有子类包含,但我意识到这是一个设计错误,所以我将它们合并到超类中,现在我已经修复了可以传递父类的继承。
-
有道理,这感觉一定是设计错误 =)
标签: typescript types typescript3.8