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

TypeScript在Array.map中使用映射类型字典调用方法报never类型错误

问题原因

TypeScript 目前无法自动将联合类型 AllOperations 中的 operation 字段和 config 对象的索引类型做关联推导。config[mod.operation] 的参数类型和 mod 的类型会被当作两个独立的联合类型处理,二者的交集自然推导为 never,但实际代码逻辑是完全安全的。

解决方案

方案1:类型断言(适合快速修复)

直接对入参做类型断言,告诉 TypeScript 该参数符合对应函数的入参要求:

const contentList = content.map((mod) => {
    return config[mod.operation](mod as never);
})

也可以写更严谨的断言形式:

const contentList = content.map((mod) => {
    return config[mod.operation](mod as Parameters<typeof config[typeof mod.operation]>[0]);
})

方案2:封装通用调用函数(适合多次使用的场景)

封装一层通用调用函数,让 TypeScript 可以正确推导类型的对应关系:

function runOperation<T extends PossibleOperationEnum>(mod: Extract<AllOperations, { operation: T }>) {
  return config[mod.operation](mod);
}

const contentList = content.map(runOperation);

方案3:升级 TypeScript 版本

如果你使用的是 4.7 及以上版本的 TypeScript,编译器对这类联合类型和索引访问的关联推导做了专项优化,部分场景下无需额外处理即可正确识别类型对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:57:01