TypeScript中已通过分支确保变量必定义,但仍提示“x is possibly undefined”的问题咨询
TypeScript中已通过分支确保变量必定义,但仍提示“x is possibly undefined”的问题咨询
各位TypeScript的大佬们,求助!我最近写代码碰到个特别费解的情况,想不通到底是怎么回事😭
先看我这段代码:
function test(a: boolean, b?: string) { if (a) { b = ""; } else if (!a) { b = ""; } b.toString(); // 这里TypeScript一直提示我「b is possibly undefined」 }
我自己反复捋了逻辑:a明明是布尔值啊,要么是true要么是false对吧?如果a为真,第一个分支会把b设为空字符串;如果a为假,第二个else if (!a)分支也会给b赋值。按说走到b.toString()这行的时候,b肯定已经被定义了啊?
然后我不死心改了下代码,多加了个else兜底分支:
function test(a: boolean, b?: string) { if(a){ b = ""; } else if (!a){ b = ""; } else{ b = ""; } b.toString(); // 神奇的是,这里完全不报错了! }
这就让我彻底懵了——难道在TypeScript的类型检查逻辑里,布尔值a和!a居然有可能同时不成立?这完全违背我对布尔值的认知啊…有没有大佬能帮我解释下这到底是怎么回事?
内容来源于stack exchange
相关产品推荐
相关产品推荐

