Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeScript: Property 'propertyName' does not exist on type 'Function'

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?

like image 885
Hany El Nokaly Avatar asked Aug 12 '16 12:08

Hany El Nokaly


2 Answers

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

like image 172
islandman93 Avatar answered Oct 28 '22 22:10

islandman93


Replace this

this.constructor.tableName()

With this

ActiveRecord.tableName()

As a static function is must be called using the class namespace.

like image 3
Joe Avatar answered Oct 28 '22 20:10

Joe