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的每个子类的并集:好吧,这是不可能的