javascript - 在构造函数中使用 plainToClass

标签 javascript typescript class constructor class-transformer

我有一个为实例分配属性的构造函数:

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'})

我现在想用类转换器替换这个基本功能:

让 user = plainToClass(User, {name: 'Jon'})

我的代码库在很多地方使用第一种方法,因此我想在构造函数中实现新方法,这样我就不会破坏旧代码:

 constructor (args = {}) {
        let instance = plainToClass(CLASSTYPE, args)
        for (let key in Object.keys(instance)) {
            this[key] = instance [key]
        }
    }

如何在构造函数中获取类类型?我无法使用 User,因为这是基本模型,其他类也可以从它扩展。

最佳答案

我想它是new.targetDoc
要获取构造函数,请使用 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'

关于javascript - 在构造函数中使用 plainToClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55358956/

相关文章:

javascript - 为什么我的复选框事件监听器没有正确监听?

java - 嵌套循环模式不起作用

java - java中如何区分接口(interface)和类

java - Android:多个类使用相同的 XML 布局

javascript - 在 ReactJS 中渲染/返回 HTML5 Canvas

javascript - 在 express 中调用函数 - 未定义

javascript - 如何在数据库中保存正确的时间?

javascript - 在javascript中更改数组对象的部分属性

javascript - 单击多个谷歌地图标记的自定义功能

typescript :如何为 npm 模块使用本地类型声明文件