Typescript类实例到javascript对象

时间:2018-03-23 19:33:20

标签: javascript typescript

这是我的代码:

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

这是我的输出:

  

A {test:' hi' }

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

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

但我认为必须有一个更好的方法,这感觉就像一个黑客。如何将typescript类实例转换为普通的javascript对象?

3 个答案:

答案 0 :(得分:3)

您可以使用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" }

答案 1 :(得分:1)

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



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




答案 2 :(得分:0)

您可能需要在将来为您的班级添加方法, 一些财产可能变得私有。所以添加一个方法toObject。然后,您将能够使用方法并以所需格式向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());