繁体   English   中英

ES6 Promise从未输入过打字稿

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM