小编gwi*_*ldu的帖子

为什么 nullish 合并运算符不能用作打字稿中的类型保护?

Typescript 3.7引入了nullish 合并运算符。对于像这样的情况,它似乎是完美的类型保护

const fs = (s: string) => s
const fn = (n: number) => n

let a: string | null | undefined
let b: number | null | undefined

const x = (a ?? null) && fs(a)
const y = (b ?? null) && fn(b)

Run Code Online (Sandbox Code Playgroud)

但是,如果您将该代码放入typescript Playground中,它会在传递给 fs / fn 函数的 a 和 b 参数上向您发出警报,例如:

'string | 类型的参数  空 |  未定义' 不可分配给类型'string' 的参数 我进一步进行了实验,发现这不仅是一个与空值合并运算符无关的问题,而且当 typescript 能够使用某些东西作为类型保护时和不能够使用某些东西时,我无法改变自己的想法(下面你可以找到一些示例

最后两行最让我困惑。在我看来,分配给 x7 和 x8 的两个表达式是完全等效的,但是在分配给 x8 的表达式中,类型保护起作用,但对于 x7 表达式中的 typescript 来说似乎不行:

const fs = …
Run Code Online (Sandbox Code Playgroud)

typescript typeguards nullish-coalescing

10
推荐指数
1
解决办法
5305
查看次数