TypeScript中用[key in Keys]映射类型时为何不允许定义额外键
原因说明
你遇到的报错本质是TypeScript语法规则限制,和重复键冲突检测没有关系:
[key in 联合类型]是映射类型专属语法,它本身是独立的类型定义结构,不能和普通的显式键定义直接写在同一个{}包裹的对象类型字面量里。- 你之前写的单独的
Foo类型是纯映射类型,符合语法规范所以不会报错;而Bar和Jar把显式键extraKey和映射类型语法塞到了同一个对象类型块里,违反了语法要求才会报错。
正确实现方式
如果需要同时包含映射生成的键和自定义的额外键,用交叉类型合并两个类型即可:
type Keys = "1" | "2" | "3" | "4" | "5"; // 交叉类型合并,正常工作 type Bar = { extraKey: string } & { [key in Keys]: string };
内容的提问来源于stack exchange,提问作者Umesh Kadam
相关产品推荐
相关产品推荐

