Использовать plainToClass в конструкторе
У меня есть конструктор, который присваивает свойства экземпляру:
class BaseModel {
constructor (args = {}) {
for (let key in args) {
this[key] = args[key]
}
}
}
class User extends BaseModel {
name: string
}
Тогда я могу создать экземпляр как это:
let user = new User({name: 'Jon'})
Теперь я хотел бы заменить эту базовую функциональность на класс-трансформер:
let user = plainToClass(User, {name: 'Jon'})
Моя кодовая база использует первый подход во многих местах, и поэтому я хотел бы реализовать новый путь в конструкторе, чтобы не ломать старый код:
constructor (args = {}) {
let instance = plainToClass(CLASSTYPE, args)
for (let key in Object.keys(instance)) {
this[key] = instance [key]
}
}
Как я могу получить тип класса в конструкторе? Я не могу использовать User, потому что это базовая модель, и другие классы также могут выходить из нее.
1 ответ
Я полагаю, это new.target
, доктор
Чтобы получить использование конструктора new.target.prototype.constructor
и это собственность name
- чтобы получить имя класса.
class BaseModel {
typeName: string;
constructor (args = {}) {
this.typeName = new.taget.constructor.name;
}
}
class User extends BaseModel {
}
const user = new User();
const typeName = user.typeName; // this would return 'User'