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

TypeScript中string & {}交叉类型的含义是什么?

string & {} 交叉类型的含义与用途

类型本质

string & {} 和普通的 string 类型完全等价:

  • TypeScript 中 {} 并非特指「空对象」,而是代表所有非 null、非 undefined 的类型
  • 字符串本身满足 {} 的类型约束,二者交叉后的有效约束仍为字符串类型,不会对实际类型校验、运行逻辑产生任何额外影响。

写法的核心作用

这个写法的唯一目的是 保留联合类型中字面量值的编辑器智能提示:
如果你直接将类型定义为:

type AriaRole = 'alert' | 'tree' | 'treegrid' | 'treeitem' | string;

TypeScript 会自动把整个联合类型折叠简化为纯 string 类型,前面定义的几个预设字面量会被完全合并掉,你在编辑器输入的时候不会收到这些常用值的补全提示。
而给 string 加上 & {} 后,TypeScript 就不会触发这个自动折叠规则:既可以保留预设字面量的输入提示,方便开发者快速选择常用取值,又允许传入任意自定义字符串,不会把取值范围限制死在几个预设值里。

是合理用法还是类型 Hack?

这个写法最早确实是利用 TypeScript 类型折叠规则的小技巧,但现在已经是 TypeScript 类型生态中被广泛认可的标准实践,包括 @types/react 在内的大量官方维护、高频使用的类型定义包都大量采用这种写法,属于通用的合理用法,不是不规范的野路子 Hack。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:06:03