如何定义“类的子类”类型?

时间:2020-05-02 11:47:19

标签: typescript types typescript3.8

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>

3 个答案:

答案 0 :(得分:1)

这是一个变体:

interface Interface {}

class SuperClass implements Interface{  }

class SubClass1 extends SuperClass {  }

const foo: Interface = new SubClass1();

答案 1 :(得分:1)

如果您真的想使用泛型类型,那么我能想到的最接近的答案是:

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

答案 2 :(得分:0)

您想实现什么? SuperClass应该适合???。如果您希望它成为SuperClass的每个子类的并集:那么,不可能

相关问题