如何在"或"运算符定义中获取特定类型



例如,我有这样的类型:

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属性="SAVE"的特定类型所以我很喜欢这个

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

我希望它会返回SaveType的类型,看起来像:

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

如何在我的目标中制作GetActionResourceType

您只需使用Extract(请参阅文档中的预定义条件类型(条件类型即可提取扩展特定类型的类型:

type GetActionResourceType<K extends ActionResource['type']> = Extract<ActionResource, { type: K }>

最新更新