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

TypeScript中使用keyof动态键赋值为何出现类型不兼容错误?

错误原因解释

先拆解几个关键类型:

  • Config 合并后为 { A: string; B: string; N: number }
  • Partial<Config> 将所有属性转为可选类型,即 { A?: string; B?: string; N?: number }
  • keyof Config 是联合类型 "A" | "B" | "N",因此变量 key 的类型是这个联合类型,而非单一确定的键

当执行 config[key] = 'abc' 时,TypeScript 会进行如下严格检查:

  • 由于 key 可能是 "A"、"B" 或 "N" 中的任意一个,TypeScript 会取所有对应属性类型的交集作为 config[key] 的预期类型。
  • 三个属性的类型分别是 string、string、number,再加上 Partial 带来的可选性(undefined),最终 config[key] 的预期类型是 string & number & undefined——而 string 和 number 没有交集,结果就只剩 undefined。
  • 你赋值的 'abc' 是字符串类型,无法兼容 undefined 类型,因此触发报错。

而 config['A'] = 'abc' 能正常执行的原因是:这里的键是明确的 "A",TypeScript 清楚对应属性的类型是 string | undefined,字符串类型可以兼容该类型,所以允许赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:32:13