У меня есть тип Action
, определенный следующим образом:
type Action =
{ type: 'DO_X' }
|
{ type: 'DO_Y', payload: string }
|
{ type: 'DO_Z', payload: number }
Это тип объединения, в котором каждый элемент является действительным действием.
Теперь я хотел бы создать функцию createAction
, которая принимает type
и возвращает новую функцию, которая принимает payload
.
const doZ = createAction('DO_Z')
console.log(doZ(42)) // { type: 'DO_Z', payload: 42 }
Здесь моя текущая реализация:
const createAction = (type: Action['type']) =>
(payload?: any) =>
({ type, payload })
Это typechecks type
, как я хочу. Как я могу также typecheck payload
? Я хочу, чтобы payload
соответствовал типу правильного действия на основе type
. Например, doZ
должен завершиться неудачей при вызове с помощью string
, потому что он payload
говорит, что он принимает только number
.