父属性为可选类型时无法提取子类型的TypeScript问题求助
父属性为可选类型时无法提取子类型的TypeScript问题求助
嘿,我完全懂你遇到的困扰!问题出在自动生成的QueryParameters类型里,query是可选属性(带有?标记),这就导致QueryParameters["query"]的实际类型是{ show: "ALL" | "ACTIVE" | "DRAFT" } | undefined——换句话说,Query可能是undefined,你自然没法直接访问一个可能不存在的对象的show属性,所以TypeScript抛出了TS2339错误。
这里有几个简单的解决办法,帮你顺利提取到ShowOptions类型:
方法一:用NonNullable排除undefined类型
先把Query类型里的undefined可能性去掉,再提取show的类型:
// 自动生成的代码(无法修改) type QueryParameters = { query?: { show: "ALL" | "ACTIVE" | "DRAFT"; }; }; // 修正后的类型提取 type Query = NonNullable<QueryParameters["query"]>; type ShowOptions = Query["show"]; // 正确得到 "ALL" | "ACTIVE" | "DRAFT"
方法二:直接嵌套提取(更简洁)
如果你不想单独定义Query类型,可以一步到位:
type ShowOptions = NonNullable<QueryParameters["query"]>["show"];
这样就能精准获取到你想要的"ALL" | "ACTIVE" | "DRAFT"类型啦,完全不需要修改自动生成的代码~
备注:内容来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

