1

我正在开发一个 Angular2 应用程序,我经常遇到以下问题:我有一个可能是的类型的对象undefined,我需要将该对象的属性分配给多个变量或另一个对象属性,所以我通常使用 optional链接运算符来检查对象是否存在:

observable$.subscribe((object: SomeInterface | undefined) => {
    this.var1 = object?.prop1;
    this.var2 = object?.prop2;
    this.var3 = object?.prop3;
});

但我总觉得我做了很多不必要的检查,我认为在这种情况下我可能应该使用 if 语句,如下所示:

observable$.subscribe((object: SomeInterface | undefined) => {
    if (object) {
        this.var1 = object.prop1;
        this.var2 = object.prop2;
        this.var3 = object.prop3;
    }
});

但在这种情况下,我觉得阅读代码可能更难?所以我想我的问题是什么更有效(我认为是第二种选择?)从代码可读性的角度来看,什么更好用?

4

2 回答 2

1

绝对选择第二种方法。一个 if 语句比检查每个道具要好得多。

如果您担心可读性,可以按以下方式编写

object && (this.var1 = object.prop1, this.var2 = object.prop2, this.var3 = object.prop3);

但从我的角度来看,可读性是一样的。

于 2021-08-21T16:39:27.590 回答
0

我知道在这种情况下这可能不是你想要的,但我总是喜欢提倡使用 RxJS 管道运算符。

observable$.pipe(filter(o => !!o)).subscribe((object: SomeInterface) => {
    this.var1 = object.prop1;
    this.var2 = object.prop2;
    this.var3 = object.prop3;
});
于 2021-08-21T17:14:39.150 回答