You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中提取嵌套联合类型里的data类型?

提取GraphQL Codegen生成类型中特定分支的Data类型

你生成的GetOffersForMembershipQuery里,offers是一个联合类型,只有当分支的__typename为QueryOffersSuccess时才存在data属性,直接用GetOffersForMembershipQuery["offers"]["data"]会因为其他分支没有data而报错。可以用TypeScript的内置类型工具或自定义条件类型来解决:

方法一:使用内置Extract类型(推荐)

直接用TypeScript自带的Extract从联合类型中筛选出目标分支,再提取data类型:

// 先筛选出__typename为QueryOffersSuccess的分支
type QueryOffersSuccess = Extract<GetOffersForMembershipQuery["offers"], { __typename?: "QueryOffersSuccess" }>;
// 提取该分支的data类型
type OfferData = QueryOffersSuccess["data"];

方法二:一行简化写法

把上面两步合并成一行:

type OfferData = Extract<GetOffersForMembershipQuery["offers"], { __typename?: "QueryOffersSuccess" }>["data"];

方法三:自定义类型工具(更直观)

如果需要更清晰的类型逻辑,可以自定义一个类型工具来筛选指定__typename的分支:

// 自定义类型工具:从联合类型中提取匹配指定__typename的分支
type ExtractByTypename<T, TargetTypename extends string> = T extends { __typename?: TargetTypename } ? T : never;

// 提取目标分支并获取data类型
type OfferData = ExtractByTypename<GetOffersForMembershipQuery["offers"], "QueryOffersSuccess">["data"];

这些方法都能精准提取到QueryOffersSuccess分支下的data数组类型,避免了联合类型中其他分支的干扰。

内容的提问来源于stack exchange,提问作者NGI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:22:43