Создать селектор, который возвращает селекторы из других срезов магазина на основе условия - PullRequest
0 голосов
/ 15 января 2019

У меня есть 2 ленивых функциональных модуля с собственным хранилищем, которые я загружаю в свое приложение Angular. Каждый из них определяет параметризованный селектор getItemById. В FirstModule getItemById возвращает объект типа FirstItem, а во SecondModule - объект типа SecondItem.

Я хочу создать селектор на уровне приложения, который позволит мне передать параметр с типом объекта и, основываясь на нем, вернуть селектор из первого или из второго модуля. Это позволяет избежать необходимости повторять условную логику, чтобы проверить, какой селектор вызывать (FirstSelectors или 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 'нельзя назначить параметру типа' string '.

Я считаю, что селектор построен неправильно. Есть ли способ построить селектор, как это?

...