Javascript ES6 promise从未键入打字脚本
我有一个if条件,其中我检查变量是否为承诺:Javascript ES6 promise从未键入打字脚本,javascript,typescript,es6-promise,Javascript,Typescript,Es6 Promise,我有一个if条件,其中我检查变量是否为承诺: if (!(myVar instanceof Promise) && !myVar.then) { // do something... } 出于某种原因,这里typescript抛出一个错误,表示类型“从不”上不存在属性“then”。换句话说,typescript将我的变量myVar视为第二个if谓词中的never类型,即!myVar.then 当我将if条件更改为以下条件时: if (!myVar.then &&
if (!(myVar instanceof Promise) && !myVar.then) {
// do something...
}
出于某种原因,这里typescript抛出一个错误,表示类型“从不”上不存在属性“then”
。换句话说,typescript将我的变量myVar
视为第二个if
谓词中的never
类型,即!myVar.then
当我将if条件更改为以下条件时:
if (!myVar.then && !(myVar instanceof Promise)) {
// do something...
}
一切似乎都很好
为什么会这样?任何帮助都将不胜感激
键入脚本示例:
- 使用
错误:然后
let myVar = new Promise(() => { }) if (!(myVar instanceof Promise) && !myVar.then) { console.log('') }
let myVar = new Promise(() => { }) if (!myVar.then && !(myVar instanceof Promise)) { console.log('') }
- 没有
则
错误:
let myVar = new Promise(() => { }) if (!(myVar instanceof Promise) && !myVar.then) { console.log('') }
let myVar = new Promise(() => { }) if (!myVar.then && !(myVar instanceof Promise)) { console.log('') }
&
之后的分支永远不会执行,因为在您的代码中myVar
总是一个Promise
,它表示通过将never
类型分配给该分支中的myVar
用这样一个错误拒绝良性的额外条件似乎过于严格,但在其他情况下,它有助于捕捉真正的错误。此外,一旦您正确键入了可能通过任一分支的代码,错误就会消失(不过,控制流分析器将来可能会变得更智能,并开始拒绝此代码):
您的逻辑将始终测试
myVar。然后
-除非myVar
是Promise
的实例-这就是您想要的吗?我只想检查变量是否为Promise。我知道只有检查myVar.then
就足够了。我问这个问题是出于好奇。我无法理解为什么会发生这样的事情,总的来说,有时候会有承诺,而不是别的时候,这是一个可怕的想法。@NahushFarkande-我理解,但是我不知道哪一位代码会发出这个错误——因为其中任何一位都没有错误——代码产生错误的唯一方式是运行myVar。然后(…)
在if条件内