Как я могу получить конкретный тип в `или` определении оператора? - PullRequest
0 голосов
/ 05 ноября 2018

Например, у меня есть такой удар:

type ActionResource = {
    type: "QUERY";
    payload: IListPayload;
} | {
    type: "GET";
    payload: {
        id: string;
    };
} | {
    type: "QUERY_NEXT";
} | {
    type: "SAVE";
    payload: {
        id: string;
        data: any;
    };
} | {
    type: "SEARCH_TEXT";
    payload: {
        ...;
    };
}

Теперь я хотел бы получить определенный тип, который имеет type properties = 'SAVE' Вот и я так делаю

type GetActionResourceType<K extends ActionResource['type']> = ActionResource
type SaveType = GetActionResourceType<'SAVE'>

Я надеюсь, он вернет тип SaveType, похожий на:

{
    type: "SAVE";
    payload: {
        id: string;
        data: any;
}

Как я могу сделать GetActionResourceType в моей цели

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете просто использовать условный тип Extract (см. В документах в Предопределенных условных типах) для извлечения типа, расширяющего определенный тип:

type GetActionResourceType<K extends ActionResource['type']> = Extract<ActionResource, { type: K }>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...