[英]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.