繁体   English   中英

Typescript类实例转换为javascript对象

[英]Typescript class instance to javascript object

这是我的代码:

class A{
    test: string
    constructor(test: string){
        this.test = test
    }
}
const a = new A("hi")
console.log(a)

这是我的输出:

{测试:“ hi”}

当我要将其作为Javascript对象上传时,它被拒绝了,因为它不是Javascript对象。 我可以这样做:

const someJSON = JSON.stringify(a)
const javascriptObject = JSON.parse(someJSON)

但是我认为必须有更好的方法,这感觉像是在破解。 如何将Typescript类实例转换为纯JavaScript对象?

您可以使用Object.setPrototypeOf()将符号的原型显式设置为对象的默认原型,即Object.prototype

 class A { constructor(test) { this.test = test } } const a = new A("hi") Object.setPrototypeOf(a, Object.prototype); console.log({ a, proto: Object.getPrototypeOf(a) }); 

这将使a等于{ test: "hi" }

如果您想要一个普通的JS对象而不是一个类实例,则可以扩展属性,例如:

 class A{ constructor(test){ this.test = test } } const a = new A("hi"); const b = { ...a }; console.log(b instanceof A); 

将来您可能需要向类中添加方法,某些属性可能会变为私有。 因此,向Object添加一个方法。 然后,您将能够使用方法并以所需的格式向api提供数据。

class A{
      constructor(private _test: string){

      }

      public toObject(){
        //return JSON.parse(JSON.stringify(this));
        //in case if you want to have underscored private
        let object = {};
        Object.keys(this).map((key: string) => {
          object[key.slice(1)] = this[key];
        });

        return object;
      }
    }

    const a = new A("hi")
    console.log(a);
    console.log('----------------------');
    console.log(a.toObject());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM