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

TypeScript中如何将联合类型映射为指定键值结构类型?

解决方案:根据联合类型成员属性生成目标映射类型

你的核心问题在于映射类型的as子句写法错误,导致条件判断没有针对联合类型的单个成员生效。原代码中as MyStructUnion['future_key']会把所有future_key合并成联合类型,每个键对应的K是整个MyStructUnion,因此条件判断返回的是'yes' | number的混合结果。

修改后的代码如下:

type KeyValues = {
  [K in MyStructUnion as K['future_key']]: 
    K extends { future_value: true } 
      ? 'yes' 
      : number;
};

关键说明:

  • 把as MyStructUnion['future_key']改为as K['future_key']:让映射遍历MyStructUnion的每一个独立成员,每个成员对应唯一的future_key值,避免键的重复覆盖和联合类型的混淆。
  • 条件判断K extends { future_value: true }会自动触发分布式条件类型:联合类型的每个成员会单独进行校验,只有明确包含future_value: true的成员会返回'yes',其余情况(future_value为false、undefined或不存在)都返回number。

最终生成的KeyValues类型完全符合你的预期:

type KeyValues = {
    'true1': 'yes';
    'false1': number;
    'false2': number;
    'false3': number;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:05:35