打字稿:将继承的类名作为函数的参数传递

时间:2019-06-11 19:57:45

标签: typescript class inheritance constructor

我有以下代码(简体):

class Component {

}

class CameraComponent extends Component {
    foo: number;

    constructor(bar: number) {
        super()
    }
}

function doSomething(klass: typeof Component) {

}

doSomething(CameraComponent);

这给了我以下错误:

TS2345: Argument of type 'typeof CameraComponent' is not assignable to parameter of type 'typeof Component'.

如果我将CameraComponent修改为此,则可以正常工作:

class CameraComponent extends Component {
    foo: number;

    constructor() {
        super()
    }
}

有什么我想念的吗?为什么不能更改构造函数签名?有什么办法可以使我不依靠any来完成这项工作吗?

1 个答案:

答案 0 :(得分:1)

typeof Component中进行编码不仅是klass是必须返回Component的构造函数的事实,而且是该构造函数的参数。因此,如果您传递的CameraComponent要求使用不同数量的参数,则会收到错误消息

如果您想接受任何返回Component的构造函数,则可以使用new (...a: any[]) => Component

class Component {

}

class CameraComponent extends Component {
    foo: number;

    constructor(bar: number) {
        super()
    }
}

function doSomething(klass: new (...a: any[]) => Component) {

}

doSomething(CameraComponent);