typescript: referera till den aktuella klassen typen
Är det möjligt att referera till aktuell klastyp i typsignaturen? så att jag kan göra något som detta:
export class Component{
constructor(config?: { [field in keyof self]: any }) {
Object.assign(this, config)
}
}
Idén är att skicka ett konfigurationsobjekt som skulle bestå av aktuella klassnycklar.
Jag skulle kunna använda gränssnitt men då behöver jag skriva samma kodavsnitt två gånger (i gränssnittet och i den implementerande klassen)
Ett annat sätt skulle vara att använda generics. Något liknande detta:
export class Component<T>{
init(config?: { [field in keyof T]?: any }) {
Object.assign(this, config)
}
}
class TestComponent extends Component<TestComponent>{
foo: number
}
const component = new TestComponent().init({ foo: 11 })
Men att ha kod som class TestComponent extends Component<TestComponent> får mig att söka efter bättre sätt...
Svar #1
Du kan referera till den aktuella klassen med polymorf this-typ
export class Component{
init(config?: { [field in keyof this]?: this[field] }) {
Object.assign(this, config)
}
}
class TestComponent extends Component{
foo: number
}
const component = new TestComponent().init({ foo: 11 })
const component2 = new TestComponent().init({ foo: "11" }) // err
Du kan dock inte använda this som en typ i konstruktorn
export class Component{
constructor(config?: { [field in keyof this]?: this[field] }) { // error
Object.assign(this, config)
}
}
