Я пытаюсь создать универсальный тип создателя действий, который принимает универсальное действие в качестве аргумента для моих редукционных редукторов:
import { Action } from 'redux';
// Generic Action
interface ActionWithPayload<TType extends string, TPayload> extends Action<TType> {
payload: TPayload;
}
// Example type using ActionWithPayload
type SetLoggedInAction = ActionWithPayload<string, boolean>;
// I have a non-generic action creator for SetLoggedInAction
type SetLoggedIn = (payload: SetLoggedInAction['payload']) => SetLoggedInAction;
// I want to make the above action creator generic, but this does not work
// throws "Type 'TAction["type"]' does not satisfy the constraint 'string'"
type GenericActionCreator<
TAction extends ActionWithPayload<TAction['type'], TAction['payload']>
> = (payload: TAction['payload']) => TAction;
Я не уверен, как получить тип GenericActionCreator
дляПринимайте только тип ActionWithPayload
в качестве аргумента, поскольку он также требует двух аргументов.
Цель состоит в том, чтобы получить тип, который будет использоваться следующим образом:
type SetLoggedIn = GenericActionCreator<SetLoggedInAction>;
И использовать его в моем определении функциивот так:
export const setLoggedIn: SetLoggedIn = payload => ({
type: 'SET_LOGGED_IN',
payload
});
Я видел другие способы ввода функции (например, Как набирать действия Redux и редукторы Redux в TypeScript? ), но я хотел бы попробоватьдля этого решения, если это возможно