typescript reselect createSelector No overload matches this call OutputSelector ParametricSelector
Primary tabs
No overload matches this call.
The last overload gave the following error.
Type 'OutputSelectorstring>' is not assignable to type 'ParametricSelector '.
Type 'string' is not assignable to type 'boolean'.ts(2769),
Возможная причина
Это интересно, но причина ( в нашем случае на момент написания данной заметки) в том, что использовалось более 12 селекторов, что не соответствует описаниям типов сигнуры функции createSelector() (см. опреление типов для createSelector() в исходном коде reselect)
ПРИМЕЧАНИЕ: использовать более 12 селекторов можно, если все они возвращают один и тот же тип данных.
Демонстрация ошибки
Пример кода:
import { createSelector } from '@reduxjs/toolkit'; type UserInfo = { name: string, active: boolean items: string[] } type RootState = { user: UserInfo } export const initialState: UserInfo = { name: '', items: [], active: true }; const selectDomain = (state: RootState) => state?.user || initialState; const selectUserName = createSelector([selectDomain], ({ name }) => name); const selectIsActive = createSelector([selectDomain], ({ active }) => active); const selectDemo1 = createSelector([selectDomain], ({ name }) => name); const selectUserInfo = createSelector([selectUserName, selectIsActive, selectDemo1, selectDemo1, selectDemo1, selectDemo1, selectDemo1, selectDemo1, selectDemo1, selectDemo1, selectDemo1, selectDemo1, selectDemo1, ], (name, active ) => `${name} ${active}`);
Решение
В данный момент решение является перекобинация селекторов, так чтобы конкретный селектор не зависел более чем от 12 своих "товарищей"))
Какие есть варианты (два, в целом это та же перегруппировка):
- Спускать текущему комноненту "лишние" данные как пропсы из вышестоящего компонента-обертки
- Попытаться завернуть "лишние" селекторы в более общий селектор, так чтобы число входных селекторов уменьшилось за счет группировки
- Log in to post comments
- 1535 reads