Supponendo che ho una classe di 'base' come questo:Come posso eseguire il sovraccarico del costruttore in una classe derivata in TypeScript?
class CcDefinition {
// Some properties here
constructor (json: string);
constructor (someVar: number, someOtherVar: string);
constructor (jsonOrSomeVar: any, someOtherVar?: string) {
if (typeof jsonOrSomeVar=== "string") {
// some JSON wrangling code here
} else {
// assign someVar and someOtherVar to the properties
}
}
}
Voglio essere in grado di estendere questa classe di base, pur sostenendo costruttore sovraccarico. Per esempio:
class CcDerived extends CcDefinition {
// Some additional properties here
constructor (json: string);
constructor (someVar: boolean, someOtherVar: number, someAdditionalVar: string);
constructor (jsonOrSomeVar: any, someOtherVar?: number, someAdditionalVar?: string) {
if (typeof jsonOrSomeVar=== "string") {
super.constructFromJson(jsonOrSomeVar);
} else {
super.constructFromDef(someOtherVar, someAdditionalVar);
// assign someVar to the additional properties of this derived class
}
}
}
Il problema è che tipografico esige che la parola 'super' compare prima (letteralmente) per l'attuazione del costruttore. Il messaggio di errore specifico di build è:
"Una chiamata 'super' deve essere la prima istruzione nel costruttore quando una classe contiene proprietà inizializzate o ha proprietà parametro."
Tuttavia, ho bisogno di determinare quali parametri passerò nel 'super' (cioè utilizzare un sovraccarico del costruttore diverso) in base a ciò che è stato fornito alla classe estesa (derivata). Qui dovresti assumere che i sovraccarichi del costruttore della classe derivata potrebbero essere molto diversi da quelli del super.
Esiste una soluzione alternativa per ciò che sto cercando di ottenere?
Ecco qualcuno che genera lo stesso problema (senza risoluzione): [http://typescript.codeplex.com/workitem/91] –