这是我的代码:
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对象?
答案 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());