Typescript: Sende inn et arvet klassenavn som et argument til en funksjon
Jeg har følgende kode (forenklet):
class Component {
}
class CameraComponent extends Component {
foo: number;
constructor(bar: number) {
super()
}
}
function doSomething(klass: typeof Component) {
}
doSomething(CameraComponent);
Dette gir meg følgende feil:
TS2345: Argument of type 'typeof CameraComponent' is not assignable to parameter of type 'typeof Component'.Hvis jeg endrer CameraComponent til dette, fungerer det fint:
class CameraComponent extends Component {
foo: number;
constructor() {
super()
}
}
Er det noe jeg går glipp av? Hvorfor kan jeg ikke endre konstruktørsignaturen? Finnes det en måte jeg kan få dette til å fungere på uten å ty til any?
Svar #1
Kodet i typeof Component er ikke bare det faktum at klass er en konstruktør som må returnere en Component, men også parameterne til den konstruktøren. Så hvis du sender inn en CameraComponent som krever et annet antall parametere, vil du få en feil
Hvis du vil akseptere hvilken som helst konstruktør som returnerer en Component, kan du bruke 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);
