类型检查类(不是类的实例)扩展了另一个类

时间:2017-03-12 22:27:52

标签: typescript

鉴于以下课程:

class BaseClass {}

我想创建另一个扩展此类的类,即:

class ExtendedClass extends BaseClass {}

然后我想将ExtendedClass作为参数传递给另一个函数(一个ExtendedClass的实例,但类本身!),并键入check this确保ExtendedClass延伸BaseClass

这不起作用:

function helloClass (c: BaseClass) {}

因为c: BaseClass表示c应该是BaseClass实例(或扩展BaseClass的内容) - 但不是扩展BaseClass本身的类。

这在TypeScript中是否可行?

1 个答案:

答案 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

code in playground