我想扩展对象:
interface MyObject {
a: string;
}
包含其他数据,例如:
type MyObjectExtended = MyObject & { b: number}
我有myObj属性和一个用于检索MyObject的函数:
private myObj: MyObjectExtended;
private getMyObject(): Observable<MyObject> {
return of({a: 'a'});
}
现在我可以做类似的事情:
this.getMyObject().subscribe(myObj => {
const myObjExtended = myObj as MyObjectExtended;
myObjExtended.b = 1;
return this.myObj = myObjExtended;
});
但是对于我来说,我不得不转换可观察对象内部的myObj似乎使我感到奇怪。 我希望做类似的事情:
this.getMyObject().subscribe(myObj => this.myObj = myObj & {b:1});
有没有办法直接将其映射?
谢谢。
答案 0 :(得分:1)
是的,您可以使用Object.assign()
来获取所需的行为。 Object.assign(obj, ...rest)
会将rest
参数列表中的所有属性复制到obj
对象中,standard library中Object.assign()
的TypeScript类型签名将返回{{ 3}}。因此,以下行为应如您所愿:
this.getMyObject().subscribe(myObj => {
return this.myObj = Object.assign(myObj, { b: 1 });
});
或更简洁:
this.getMyObject().subscribe(myObj =>
this.myObj = Object.assign(myObj, { b: 1 })
);
希望有帮助。祝你好运!