Typescript:将继承的类名作为参数传递给函数

Ros*_*ote 5 inheritance constructor class typescript

我有以下代码(简化):

class Component {

}

class CameraComponent extends Component {
    foo: number;

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

function doSomething(klass: typeof Component) {

}

doSomething(CameraComponent);
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

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

如果我修改CameraComponent为它工作正常:

class CameraComponent extends Component {
    foo: number;

    constructor() {
        super()
    }
}
Run Code Online (Sandbox Code Playgroud)

我有什么遗漏的吗?为什么不能更改构造函数签名?有什么方法可以让我在不求助的情况下完成这项工作吗any

Tit*_*mir 3

编码的不仅是必须返回 a 的构造函数typeof Component这一事实,而且还包括该构造函数的参数。因此,如果您传入需要不同数量的参数,您将收到错误klassComponentCameraComponent

如果你想接受任何返回 a 的构造函数,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);
Run Code Online (Sandbox Code Playgroud)