I am designing a custom Model structure for my NodeJS project. I have created a base class named Model which is inherited by other model classes. The base model class will have a set of properties that needs to be accessed by the methods. The properties will get overwritten by child classes as shown in the examples below(by User model).
There is a table
property which I need to access from both static as well as non-static methods as such:
Case 1: Base model class has non-static property table
.
class Model {
protected table = '';
public static find(id: number) {
// I want to have table name in here but cant.
}
public save() {
// I am able to get table name in here `this`.
}
}
class User extends Model {
protected table = 'users'; // overwriting parent's table property
// list of other non static properties in here
constructor(user: UserSchema) {
// assign non static properties from here
}
}
Case 2: Base model class has static property table
.
class Model {
protected static table = '';
public static find(id: number) {
// I am able to get table name in here using `this`.
}
public save() {
// I want to have table name in here but cant.
}
}
class User extends Model {
protected static table = 'users'; // overwriting parent's table property
// list of other non static properties in here
constructor(user: UserSchema) {
// assign non static properties from here
}
}
I tried changing the static and non-static nature of table
property but whenever I switch, there occurs two scenarios.
- Either static method can only access static property.
- Or non-static method can only access non-static property.
I could access static property using class name(e.g.
Model.table
) but it will result base model's empty value(""
) and I need the User's overloaded table value('users') to work.
I want to have control over both the scenarios where I could get the properties interchangibly(accessing static property from non static method as well as static property from non static method). How can I acheive this behaviour? Any suggestion is appreciated.