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

如何将TypeScript列表类型转换为指定键值对类型?

如何将TypeScript数组类型转换为对应键值对类型?

你遇到的问题是因为直接取setOfFunctions[number]["fun"]会得到所有函数类型的联合,导致每个键都对应所有可能的函数类型。要实现一一对应的键值对,需要利用TypeScript 4.1及以上版本支持的映射类型重映射(as子句),或者通过条件类型精准匹配每个键对应的元素类型。

方法一:使用映射类型重映射(推荐)

这种写法最简洁直观,直接遍历数组的每个元素类型,将元素的name作为键,fun作为对应的值:

type setOfFunctions = [{
    name: 'hi',
    fun: () => number
}, {
    name: 'world',
    fun: () => string
}]

type MyFunctions = {
    [T in setOfFunctions[number] as T["name"]]: T["fun"]
}

编译后得到的类型正是你预期的:

type MyFunctions = {
    hi: () => number;
    world: () => string;
}

方法二:使用条件类型配合Extract

如果需要更通用的工具类型,可以封装成一个泛型,通过Extract提取出与当前键匹配的元素类型,再获取对应的函数类型:

type MapFunctionArray<T extends { name: string; fun: unknown }[]> = {
    [K in T[number]["name"]]: Extract<T[number], { name: K }>["fun"]
}

// 使用示例
type MyFunctions = MapFunctionArray<setOfFunctions>

这个工具类型可以复用在类似结构的数组类型转换中,结果和方法一一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:20:44