Извлечение полезной нагрузки Redux из типа модуля Actions по типу действия - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь извлечь payload из Actions типа объединения, но не знаю, возможно ли это в Typescript.

Итак, вот что я хочу достичь.

type Actions = { type: "INIT", payload: { x: string }} | { type: "CLOSE", payload: { y: number }};


type ExtractPayload<T> = // how to extract payload given action type as `T`


function doSomething<T extends Actions["type"]>(type: T, payload: ExtractPayload<T>) { 
    // ... 
}

1 Ответ

0 голосов
/ 24 декабря 2018

Вы можете использовать условный тип Extarct для извлечения соответствующего типа действия из объединения, а затем использовать запрос типа, чтобы получить тип свойства payload:

type Actions = { type: "INIT", payload: { x: string }} | { type: "CLOSE", payload: { y: number }};


type ExtractPayload<T extends Actions["type"]> = Extract<Actions, {type: T }>['payload']


function doSomething<T extends Actions["type"]>(type: T, payload: ExtractPayload<T>) { 
    // ... 
}

doSomething("INIT", { x: "" }) //ok
doSomething("INIT", { x: 1 }) //err
doSomething("CLOSE", { y: 1 }) //ok
doSomething("CLOSE", { y: "1"} ) //err
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...