创建选择器,该选择器根据条件返回商店其他部分的选择器

时间:2019-01-15 06:09:05

标签: angular ngrx ngrx-store

我有2个具有各自存储区的延迟加载功能模块,可以将它们加载到Angular应用程序中。它们每个都定义了一个getItemById参数化选择器。在FirstModule中,getItemById返回类型为FirstItem的对象,在SecondModule中,返回类型为SecondItem的对象。

我想在应用程序级别创建一个选择器,该选择器允许我传递对象类型的参数,并基于该参数从第一个模块或第二个模块返回选择器。 这是为了避免重复执行条件逻辑来检查应用程序不同部分中要调用哪个选择器(FirstSelector或secondSelectors)。

应用选择器

export const getItemById = (id: string, type: Type) => {
        switch (type) {
            case Type.First: {
                return createSelector(FirstSelectors.getItemById(id), item => item);
            }
            case Type.Second: {
                return createSelector(SecondSelectors.getItemById(id), item => item);
            }
        }
    };

功能模块选择器

export const getItemById = (id: string) =>
        createSelector(getItems, (items) => {
            return items.find(item => item.id === id);
        });

服务

private loadItem(): Observable<FirstItem | SecondItem> {
return this.store.select(AppSelectors.getItemById(this.id, this.type)).pipe(
            take(1),
            switchMap((item) => item));

    }

TypeScript引发错误错误TS2345:'MemoizedSelector |类型的参数不能将“ MemoizedSelector”分配给“字符串”类型的参数。

我相信选择器的构建不正确。有没有办法建立这样的选择器?

0 个答案:

没有答案