Я немного озадачен синтаксисом Redux Thunk в Typescript. Я довольно новичок в Typescript, но у меня все нормально, но есть особая часть, которую я не понимаю.
Вот файл определения типа для redux-thunk:
import { Middleware, Action, AnyAction } from "redux";
export interface ThunkDispatch<S, E, A extends Action> {
<T extends A>(action: T): T; // I don't understand this line
<R>(asyncAction: ThunkAction<R, S, E, A>): R; // or this line
}
export type ThunkAction<R, S, E, A extends Action> = (
dispatch: ThunkDispatch<S, E, A>,
getState: () => S,
extraArgument: E
) => R;
export type ThunkMiddleware<S = {}, A extends Action = AnyAction, E = undefined> = Middleware<ThunkDispatch<S, E, A>, S, ThunkDispatch<S, E, A>>;
declare const thunk: ThunkMiddleware & {
withExtraArgument<E>(extraArgument: E): ThunkMiddleware<{}, AnyAction, E>
}
export default thunk;
Часть, с которой я смущен:
<T extends A>(action: T): T; // I don't understand this line
<R>(asyncAction: ThunkAction<R, S, E, A>): R; // or this line
Я смотрел на документация, и это показывает это:
interface GenericIdentityFn<T> {
(arg: T): T;
}
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: GenericIdentityFn<number> = identity;
Значит ли это, что ThunkDispatch является функцией и может следовать любой из этих двух сигнатур функций?
Я могу видеть из Thunk Action, эта отправка всегда будет ThunkDispatch, но я не могу разобрать интерфейс ThunkDispatch.
Было бы фантастически c, если бы кто-то мог объяснить это для меня.
Большое спасибо.