我有以下问题:
给定的typescript类:
class OtherClass {
private _c: number;
get c(): number {
return this._c;
}
}
class SomeClass {
private _a: number;
private _b: OtherClass;
get a(): number {
return this._a;
};
get b(): OtherClass{
return this._b;
};
}
现在我有了SomeClass类的一个实例,让我们称之为scInstance。
我想做的是将这个实例转换为一个对象。
类似这样的东西:
const scObject = {...scInstance};
问题是该对象只有突出显示的私有属性:
scObject = {
_a: 1,
_b: {
_c: 4
}
}
但是我想要一个像这样的物体:
scObject = {
a: 1,
b: {
c: 4
}
}
我不能修改SomeClass的定义,所以我的问题是,有没有什么优雅的方法可以将这个类转换为没有这些下划线属性的对象?
提前谢谢。
private
这里只是typescript的一个提示,它在编译的javascript中并不是真正私有的。
此字体:
class OtherClass {
private _c: number;
get c(): number {
return this._c;
}
}
编译到此javascript
class OtherClass {
get c() {
return this._c;
}
}
这意味着,您的类只是一个普通类,其属性恰好以下划线开头。
如果这不是你想要的行为,你就必须制作一个自定义的编码器函数来做你想要的事情。
我担心没有优雅的解决方案。这是我目前的解决方案,以防有人遇到同样的问题。
const mapKeysDeep = (obj, cb) => _.mapValues(
_.mapKeys(obj, cb),
val => (_.isObject(val) ? mapKeysDeep(val, cb) : val),
);
const scObject = scInstance.map(det => {
return mapKeysDeep(det, (value, key) => {
return _.replace(key, "_", "");
});
});