При применении интерфейса к функции dispatch()
моего редукционного thunk, проверка ошибок кажется неправильной.Например, если я закомментирую свойство, Typescript жалуется на то, что оно действительно включено, говоря, что оно отсутствует:
...
type ThunkResult<R> = ThunkAction<R, RootState, undefined, Action>;
export interface ShowSnackbar {
type: string,
isOpened: boolean
}
export const showSnackbar = (): ThunkResult<void> => (dispatch, getState) => {
dispatch<ShowSnackbar>({
// type: 'baz',
isOpened: true // <-- 'isOpened' does not exist in type 'ThunkAction<ShowSnackbar ...
});
}
После проверки типа ThunkDispatch redux-thunk я заметил, что первое объявление функцииперегруженные функции игнорируются, и вторая, которая ожидает, что функция была вызвана, когда мое действие имеет закомментированное свойство (преднамеренно введенная ошибка):
export interface ThunkDispatch<S, E, A extends Action> {
<T extends A>(action: T): T;
<R>(asyncAction: ThunkAction<R, S, E, A>): R;
}
Если, скажем, я удаляю <R>(asyncAction: ThunkAction<R, S, E, A>): R;
, проверка типа возвращается кнормальный, и TS предупредит меня правильно:
'тип' отсутствует в типе '{isOpened: true;} 'но требуется в типе' ShowSnackbar '.
Я собрал демо на TS Playground , которое демонстрирует проблему.
Или я делаючто-то не так?
Спасибо!