У меня есть 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 '.
Я считаю, что селектор построен неправильно. Есть ли способ построить селектор, как это?