以下代码在TypeScript中是合法的:
let asyncCondition = async(): Promise<boolean> => // .. calculate & return a boolean
if(asyncCondition()){ // forgot to await. condition is always true
// .. do stuff
}
由于asyncCondition()
返回普通非空Promise
,因此if
块中的代码将始终执行。这是JavaScript行为,TypeScript不会抱怨也是可以理解的。
但在上面的场景中,我的意思是:
let asyncCondition = async(): Promise<boolean> => // .. calculate & return a boolean
if(await asyncCondition()){ // condition is asyncCondition()
// .. do stuff
}
有没有办法让TypeScript为我检查这种错误?
答案 0 :(得分:4)
编译器没有这样做,我不希望它很快就会这样做。它被多次询问和拒绝。我能找到的案例:
在每种情况下,在不改变编译器的情况下解决这些问题的原因是它会发生过于激进的变化,而真正的麻烦应该可以完成这项工作。
好消息是,最近有一条新规则merged into tslint
's codebase提供有关此问题的警告。据我所知,该规则还没有发布在tslint
的版本中。发布后,如果您在strict-boolean-expressions
规则中将true
设置为tslint
,那么tslint
会在您使用带有非严格布尔值的表达式的条件时发出警告
答案 1 :(得分:1)
我遇到了类似的问题,并发现了strict-boolean-expressions
规则。并非OP给出的示例的完美答案,但可能会对其他人有所帮助。
激活此规则会导致类似
的表达式if (nonBooleanCondition) {
显示以下警告:
在'if'条件下不允许使用此类型,因为它是[TYPE]。只能使用布尔值。