我有以下代码(简体):
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
来完成这项工作吗?
答案 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);