Набор инструментов Redux Тип отправки intellisense

#reactjs #typescript #redux #redux-toolkit

Вопрос:

Я следовал документу redux toolkit typescript doc. В документе говорится, что для создания собственного крючка useDispatch, приведенного ниже

 export const useAppDispatch = () => useDispatch<AppDispatch>() 
 

и используйте его в компонентах следующим образом

 const dispatch = useAppDispatch();
const increase = () => {
  dispatch(increase());
}
 

Все работает идеально. Но то, что я ожидал, должно иметь разумное представление обо всех действиях, которых не хватает. Мой вопрос в том, как я могу достичь этих типов, чтобы я мог получить помощь от typescript, какие действия разрешены для аргумента отправки.

при наведении на функцию отправки отображаются следующие типы

 const dispatch: <AnyAction>(action: AnyAction) => AnyAction 
 

Любая помощь будет признательна.

Ответ №1:

С помощью Redux любое действие может быть отправлено в любое время. Таким образом, концептуально не имеет смысла пытаться ограничить, какие действия могут быть отправлены на уровне типов. Существует ряд библиотек и статей «Redux TS», которые пытаются реализовать этот подход, но мы, сопровождающие, считаем, что это бесполезно.

См.Сообщение сопровождающего Redux Ленца Вебера «Не создавайте типы объединений с помощью действий Redux» для получения более подробной информации.

Тем не менее, я бы, по крайней мере, ожидал, что при наведении курсора useAppDispatch появится тип TS, который больше похож на этот:

 (alias) useAppDispatch(): ThunkDispatch<CombinedState<{
    // fill in actual state fields for your app here
}>, null, AnyAction> amp; ThunkDispatch<...> amp; Dispatch<...>
import useAppDispatch
 

Дважды проверьте настройки своего приложения и убедитесь, что вы используете RTK configureStore для создания магазина.

Комментарии:

1. Спасибо, Мейкериксон. Я понимаю вашу точку зрения. В целях обучения не могли бы вы поделиться некоторыми ссылками на статьи, в которых это реализовано?

2. Боюсь, я не совсем понимаю, о чем вы здесь просите. Не могли бы вы уточнить?

3. «Существует ряд библиотек и статей «Redux TS», которые пытаются реализовать этот подход» — мне просто любопытно изучить эти подходы, поэтому я запросил несколько статей.