排除`keyof T`运算符中的只读字段

时间:2018-10-23 11:33:53

标签: angular typescript ngrx

我正在编写一个角度应用程序,其中我的一个组件订阅了ngrx存储中的许多值。我的ngOnInit函数如下所示:

this.store.pipe(select(searchResults), takeUntil(this.destroyed$))
  .subscribe(results => this.searchResults = results);
this.store.pipe(select(searchError), takeUntil(this.destroyed$))
  .subscribe(error => this.searchError = error);
// Lots of similar statements below

我认为这太冗长了。这也使得一眼就很难掌握哪些字段从商店中获取了它们的价值。我的直觉说,应该有可能以更简洁的方式编写此代码,例如下面的示例:

this.syncField(searchResults, 'searchResults');
this.syncField(searchError, 'searchError');
// Lots of similar statements below

这种方法依赖于我无法编写的syncField方法。我尝试了以下方法:

syncField<T>(selector: MemoizedSelector<object, T>, field: keyof MyComponent) {
    this.store.pipe(select(selector), takeUntil(this.destroyed$)).subscribe(value => {
        this[field] = value;
    });
}

但是,该组件具有一些只读字段,这会导致分配(this[field] = value)失败,并显示以下消息:Cannot assign to [readonly field name] because it is a constant or a read-only property.

这引发了以下问题:

  1. 是否可以使用keyof T来过滤掉只读属性?
  2. 如果这是不可能的,那么还有另一种方法可以编写syncField方法吗?
  3. 或者,是否有最佳实践来使许多可观察对象的订阅变得不那么冗长?

0 个答案:

没有答案