[英]ES6 promise has never type in typescript
我有一个if条件,正在检查变量是否为promise:
if (!(myVar instanceof Promise) && !myVar.then) {
// do something...
}
这里由于某种原因,打字稿会引发错误,指出Property 'then' does not exist on type 'never'
。 换句话说,打字稿正在考虑我的变量myVar
是类型never
在第二if
断言即!myVar.then
。
另外,当我将if条件更改为以下内容时:
if (!myVar.then && !(myVar instanceof Promise)) {
// do something...
}
一切似乎都正常。
为什么会这样呢? 任何帮助,将不胜感激
打字机游乐场示例:
随着then
错误:
let myVar = new Promise(() => { }) if (!(myVar instanceof Promise) && !myVar.then) { console.log('') }
没有then
错误:
let myVar = new Promise(() => { }) if (!myVar.then && !(myVar instanceof Promise)) { console.log('') }
它与工作中的类型防护一起进行控制流分析。 它发现&&
之后的分支将永远不会被执行,因为在您的代码中myVar
始终是Promise
,并且它通过在该分支中为myVar
分配never
类型来表示这一点。
拒绝带有此类错误的良性额外条件似乎过于严格,但在其他情况下,它有助于捕获实际错误。 同样,一旦您输入了正确类型的代码(可能会通过任一分支),错误就会消失(但是,将来,控制流分析器可能会变得更聪明,并且也开始拒绝此代码):
let x: boolean = true;
let myVar = x ? new Promise(() => { }) : { then: false };
if (!(myVar instanceof Promise) && !myVar.then) {
// no error
console.log('z')
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.