我没有正确的打字词汇表来描述我试图实现的目标,所以我将使用代码片段来描述我的目标。
interface ActionPayloadTypes {
FETCH_LIST_REQUEST: any,
FETCH_LIST_SUCCESS: string[],
FETCH_LIST_FAILURE: string
}
interface Action <T extends keyof ActionPayloadTypes> {
type: T
payload: ActionPayloadTypes[T]
}
我想基于这两个接口创建一个联合类型的Action。
基本上我想
type Actions = Action<'FETCH_LIST_REQUEST'> | Action<'FETCH_LIST_SUCCESS'> | Action<'FETCH_LIST_FAILURE'>
而不必为每个键手动编写联合类型。我尝试使用<keyof ActionPayloadTypes>
,它在Action
中创建了一个联合类型。见下文。
Action<'FETCH_LIST_REQUEST' | 'FETCH_LIST_SUCCESS' | 'FETCH_LIST_FAILURE'>
我到底做错了什么?
2条答案
按热度按时间nnt7mjpx1#
必须将
ActionPayloadTypes
类型的每个键Map到对Action
类型的“调用”中,然后用ActionPayloadTypes
的键对这个部分结果进行索引,以获得所需的并集。yx2lnoni2#
你走对了路,正如你所注意到的,
Action<keyof ActionPayloadTypes>
给你一个类型,其中泛型参数是键的并集。为了获得
Action
的每种类型的并集,我将其分为两个步骤:首先,我使用Map类型获取一个Map,其中包含
Action
的每种类型的值在这里,我可以基于此Map中的值创建一个联合类型
当然,您可以将这些类型组合成单个类型,以使其更加简洁