鉴于以下课程:
class BaseClass {}
我想创建另一个扩展此类的类,即:
class ExtendedClass extends BaseClass {}
然后我想将ExtendedClass
作为参数传递给另一个函数(不一个ExtendedClass
的实例,但类本身!),并键入check this确保ExtendedClass
延伸BaseClass
。
这不起作用:
function helloClass (c: BaseClass) {}
因为c: BaseClass
表示c
应该是BaseClass
的实例(或扩展BaseClass
的内容) - 但不是扩展BaseClass
本身的类。
这在TypeScript中是否可行?
答案 0 :(得分:5)
您可以代表这样的课程:{ new(): BaseClass }
。
或者在一个例子中:
interface BaseClassConstructor<T extends BaseClass> {
new (): T;
}
class BaseClass {
str: string;
}
class ExtendedClass extends BaseClass { }
function fn<T extends BaseClass>(ctor: BaseClassConstructor<T>) {
}
fn(BaseClass); // fine
fn(ExtendedClass); // fine
class A {
prop: any;
}
fn(A); // error