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

How to define a "subclass of class" type?

class SuperClass { ... }

class SubClass1 extends SuperClass { ... }
class SubClass2 extends SuperClass { ... }
class SubClass3 extends SuperClass { ... }

const foo: ??? = ...

对于 foo 我想给出一个类型,这意味着 foo 是任何 class 扩展 SuperClass 的实例。我知道我可以使用联合类型并列出所有 subclasses 但必须有更好的方法。不知何故 extends 或者怎么做?


更新:

我问这个是因为我有这个问题:

type SomeType = { foo: SuperClass };

public someMethod<T extends SuperClass>() {

  const bar: SomeType = ... ;

  const someSet: Set<T> = new Set();

  someSet.add(bar.foo);

Argument of type 'SuperClass' is not assignable to parameter of type 'T'. 'SuperClass' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'SuperClass'.

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

这是一种变体:

interface Interface {}

class SuperClass implements Interface{  }

class SubClass1 extends SuperClass {  }

const foo: Interface = new SubClass1();

你想达到什么目的? SuperClass 应该适合 ???。如果你想让它成为 SuperClass 的每个子类的联合:嗯,这是不可能的

如果你真的想要通用类型,我能想到的最接近的答案是:

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);
}