关于 TypeScript Truthiness narrowing 的一个疑问?

作者站长头像
站长
· 阅读数 21

TypeScriptTruthiness narrowing 有如下介绍:

all coerce to false, and other values get coerced to true. You can always coerce values to booleans by running them through the Boolean function, or by using the shorter double-Boolean negation. (The latter has the advantage that TypeScript infers a narrow literal boolean type true, while inferring the first as type boolean.)
// both of these result in 'true'
Boolean("hello"); // type: boolean, value: true
!!"world"; // type: true,    value: true

当我键入以下代码时,类型提示却都是 boolean :

let x = Boolean('hello')
let y = !!'hello'

关于 TypeScript Truthiness narrowing 的一个疑问?

这是为何?

回复
1个回答
avatar
test
2024-06-20

你应该是没有开启strictNullChecksstrict的配置,null严格检查没有开启时确实会显示boolean

默认情况下null和undefined是所有类型的子类型

也就是说当你没有开启严格检查时:

const str: 'hello' = null; // ok
const bol: true = null; // ok

换句话说你的所有类型都将变成anyType | null | undefined,以你的例子来说【strictNullChecks: false】:!!"world"转成等价于!!"world" || !!null || !!undefined,即类型为:true | false | false,故最终类型为boolean

https://github.com/microsoft/TypeScript/issues/10564

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