首页 > 解决方案 > ngrx 中的参数化选择器的类型未知

问题描述

我有一家ngrx/entity商店,我想使用参数选择所有实体并将其绘制在表格中。

我做了以下选择器

export const selectByAdvertiserId = () =>
  createSelector(selectAllUsers, (users: Array<EntityUser>, props: { advertiserId: string }) =>
    users.filter((u) => u.advertiserId === props.advertiserId)
  )

并像这样使用它

  connect() {
    return this.store.pipe(
      select(selectByAdvertiserId(), { advertiserId: this.advertiser?.id }),
      map((res) => res || [])
    )
  }

问题是 connect 应该返回 a并且编译时Observable<EntityUser[]>的当前实现只返回以下错误:

'AdvertisersUsersListComponent' 类型中的属性 'connect' 不能分配给基本类型 'DataSource' 中的相同属性。类型 '() => Observable' 不可分配给类型 '(collectionViewer: CollectionViewer) => Observable<EntityUser[] | 只读实体用户[]>'。类型 'Observable' 不可分配给类型 'Observable<EntityUser[] | 只读实体用户[]>'。类型 'unknown' 不可分配给类型 'EntityUser[] | 只读实体用户 []'。类型“未知”不可分配给类型“只读 EntityUser[]”。

但我不明白什么是未知类型

我改为

export const selectByAdvertiserId2 = createSelector(
  selectAllUsers,
  (users) => (advertiserId: string) => users.filter((u) => u.advertiserId === advertiserId)
)
  connect() {
    return this.store.pipe(
      select(selectByAdvertiserId),
      map((res) => res(this.advertiser?.id || '') || [])
    )
  }

这有正确的类型,买我不喜欢它是一个返回的函数的事实。我将如何解决我的案例 1 ?

标签: reduxrxjsngrx

解决方案


推荐阅读