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 & {} 这样的实现效果应该如何理解?
一个没在官方用例中出现过的写法小 trick。
简而言之,
'base'
和'delete'
都是string
的子类型,所以经过类型合并后,就只剩下string
了。但'base'
和'delete'
并不是string & {}
的子类型,它们无法类型合并,所以它们都会保留。P.S. 从上面的 Issue 可以看出,社区里大部分人还是希望前者的写法也能支持 Intellisense 的,但应该是某些底层设计的原因导致 TS 对这个特性实现起来很困难,所以是一直搁置的状态的。目前还是需要后者这种 trick 写法,确实不太符合直觉。