为什么添加`& string`可优化TypeScript中`keyof`的智能提示?
TypeScript 中
keyof 交叉 string 类型提示差异原因 该差异和TS内置的类型展示规则直接相关,核心原因分两点:
keyof运算符的返回值是目标类型所有键的联合类型,成员可以包含string、number、symbol三类,完全匹配TS允许的对象键合法类型范围。- TS编辑器的智能提示有简化展示的优化逻辑:如果类型别名直接等于
keyof 某类型的原生运算结果,TS会优先展示缩写形式keyof 目标类型,避免复杂类型展开后提示信息过于冗余。
加& string后触发联合展开的原因
keyof Foo & string本质是做了两步类型处理:
- 类型过滤:把
keyof Foo返回的联合里所有非string类型的成员(比如数字键、Symbol键)全部剔除,仅保留字符串类型的键 - 触发全量计算:交叉运算属于二次类型计算,得到的结果不再是原生的
keyof运算别名,TS就会把最终计算完成的字符串字面量联合完整展开,你看到的就是"a" | "b" | "c"的效果。
补充验证:如果给Foo添加数字或Symbol类型的键,
keyof Foo & string的返回结果会自动过滤掉这两类键,仅保留字符串字面量成员。
内容的提问来源于stack exchange,提问作者dwjohnston
相关产品推荐
相关产品推荐

