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

TypeScript中如何通过嵌套映射将数组类型转换为目标类型?

TypeScript数组类型映射为目标对象类型解决方案

正确实现代码

const a = {
  label: "A",
  actions: {
    a() {},
    b() {},
  },
} as const;

const b = {
  label: "B",
  actions: {
    c() {},
    d() {},
  },
} as const;

type I = [typeof a, typeof b];

// 目标类型实现
type T = {
  [Item in I[number] as Item["label"]]: Item["actions"];
};

代码说明

  • 直接遍历数组类型I的所有元素(I[number]获取元组的元素联合类型)
  • 使用as Item["label"]将每个元素的label属性值作为对象的键
  • 将对应元素的actions属性值作为该键的类型,精准绑定每个label与对应actions的类型关系,避免联合类型混淆。

原代码问题分析

  1. 冗余的M类型:M<T>会对传入类型的label做映射,当T为联合类型时,会生成包含所有label键的对象,导致每个键都带上所有actions的联合类型。
  2. 映射逻辑绕路:原代码遍历元组的索引键(0、1)再转换为label,过程中未正确保留单个元素的label与actions的对应关系,导致TypeScript将所有元素类型合并为联合类型处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:07:21