如何将对象类型映射到自身的扩展中

时间:2019-05-14 11:14:48

标签: typescript

我想扩展对象:

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});

有没有办法直接将其映射?

谢谢。

1 个答案:

答案 0 :(得分:1)

是的,您可以使用Object.assign()来获取所需的行为。 Object.assign(obj, ...rest)会将rest参数列表中的所有属性复制到obj对象中,standard libraryObject.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 })
    );

希望有帮助。祝你好运!