Это обычная структура действия async
для редуктора, но с использованием машинописи.
По сути, вы определяете типы данных как interfaces
сверху, это просто объекты, определяющие, какой тип данных вы ожидаете пройти.
Тогда у вас есть действие и редуктор.
Их реализация точно такая же, как и в обычном реакт-редуксе. Однако вы реализуете действие async
(выполняете асинхронный вызов с использованием fetch
), поэтому вам также нужно использовать redux-thunk
и его тип из машинописи AppThunkAction
.
Следовательно, вам нужно указать, какую «вещь» (тип данных) ожидает передать каждая функция.
Если вам нужен определенный тип данных (сложный тип), удобно создать для него interface
. В противном случае вы можете повторить этот сложный тип, следуя столбцам (:
) каждого объекта, которому вы хотите его назначить, но это не рекомендуется.
Например, если я ожидаю объект от вызова API с id
, name
, hobbies
и timestamp
, интерфейс для этого сложного типа будет:
export interface dataFromAPICall {
id: number;
name: string;
hobbies?: string[];
timestamp: number;
}
В этом случае хобби является необязательным (?
) и он ожидает и массив строк ['football', 'sky', 'bodyboard surfing']
.
В случае сложных типов в популярных библиотеках обычно эти типы уже определены, например AppThunkAction
в избыточном или ReactNode
в React.
Надеюсь, это поможет!