TypeScript compiler is giving me an error on the following code example although the generated JavaScript on https://www.typescriptlang.org/play/ works as intended
The error is: error TS2339: Property 'tableName' does not exist on type 'Function'.
class ActiveRecord {
static tableName(): string { // override this
return "active_record";
}
static findOne(): any {
return 'Finding a record on table: ' + this.tableName();
}
save(): void {
console.log('Saving record to table: ' + this.constructor.tableName());
}
}
class MyModel extends ActiveRecord {
static tableName(): string {
return "my_model";
}
}
let x = new MyModel();
x.save(); // "Saving record on table: my_model"
console.log(MyModel.findOne()); // "Finding a record on table: my_model"
Is there is anything I can do to fix this error?
To fix the TypeScript error and still get the intended behavior (not using ActiveRecord.tableName()) you can cast the constructor to a typeof ActiveRecord
(this.constructor as typeof ActiveRecord).tableName())
Reference link: Access to static properties via this.constructor in typescript
Replace this
this.constructor.tableName()
With this
ActiveRecord.tableName()
As a static function is must be called using the class namespace.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With