如何定义"subclass of class"类型?


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"可以用不同的约束子类型实例化"SuperClass"。

嗯。。也许我应该把Set<T>改成Set<SuperClass>

这是一种变体:

interface Interface {}
class SuperClass implements Interface{  }
class SubClass1 extends SuperClass {  }
const foo: Interface = new SubClass1();

如果你真的想拥有泛型类型,我能找到的最接近的答案是:

interface SuperClass {
a: string;
}
type SomeType<T extends SuperClass> = { foo: T };
function someMethod<T extends SuperClass>(bar: SomeType<T>) {
const someSet: Set<T> = new Set();
someSet.add(bar.foo);
}

您想要实现什么?SuperClass对于???应该是好的。如果你希望它是SuperClass的每个子类的并集:好吧,这是不可能的

最新更新