typescript中 string & {} 如何理解?

作者站长头像
站长
· 阅读数 8
type a = 'base' | 'delete' | string
type b = 'base' | 'delete' | (string & {})

let c:a = 
let d:b = 

如果使用了 a 类型,那么当设置 c 的等号后, 是无法触发 'base' | 'delete' 的提示的,因为类型被 string 覆盖了。但是如果使用的是 b 的类型设置,可以触发 'base' | 'delete' 的类型提示,当然依然可以设置为 string 类型。string & {} 这样的实现效果应该如何理解?

回复
1个回答
avatar
test
2024-07-03

type a = 'base' | 'delete' | string 所示。这意味着 a 类型可以是 'base' 或 'delete',也可以是任意字符串 string。

交叉类型(&)可以将多个类型合并为一个类型,并包含其中所有属性和方法。使用交叉类型后,string & {} 的实现相当于一个空接口类型,它可以保留原有类型的特性,同时又使联合类型中的字符串字面量类型能够发挥正确的约束作用,如 type b = 'base' | 'delete' | (string & {}) 所示

类型 b 被定义为 'base' | 'delete' | (string & {}),它与类型 a 的区别在于使用了交叉类型将 string 与空接口类型合并。这样就使得 b 类型拥有了 a 类型的所有取值范围,同时还可以正确地约束变量的取值为 'base' 或 'delete'。因此,当设置变量 d 的值为 'base' 或 'delete' 时,TypeScript 将正确地给出类型提示。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容