Mi piacerebbe che l'implementazione statica di un metodo statico utilizzi il valore della classe derivata. Ad esempio, nel semplice esempio seguente, quando chiamo User.findById()
voglio che utilizzi il tableName overridden User
quando si esegue l'implementazione definita nella classe base SqlModel.Come sovrascrivere le variabili statiche dalle classi derivate inehirted in typescript
Come faccio ad accertarmi che le classi di base statiche tableName utilizzino 'Utente' e sia questo il modo giusto di dichiarare essenzialmente una proprietà statica astratta?
class SqlModel {
protected static tableName:string;
protected _id:number;
get id():number {
return this._id;
}
constructor(){
}
public static findById(id:number) {
return knex(tableName).where({id: id}).first();
}
}
export class User extends SqlModel {
static tableName = 'User';
name:string;
constructor(username){
this.name = username;
}
}
E vorrei ottenere un errore che dice nometabella non è definito, ma se dico SqlModel.tableName allora non utilizzare le classi nome tabella derivata
User.findById(1); //should call the knex query with the tablename 'User'
non funziona in dattiloscritto> 1.8 Credo. Esiste una soluzione: (this.constructor come qualsiasi) .tableName come mostrato qui: http://stackoverflow.com/questions/37727307/referencing-class-without-name-to-use-different-static-method-in- sottoclasse-in-t – Dominik
@Dominik la differenza è che in questo caso la domanda sta chiedendo di un metodo statico -findById'-non un metodo di istanza. –
Hai ragione, grazie per ulteriore spiegazione :) – Dominik