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
相关产品推荐
相关产品推荐

