有没有办法强制“if”只接受TypeScript中的布尔值?
以下代码在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打字为我检查这种错误?
编译器不会这样做,我不希望它很快就能做到。 它已被问及多次拒绝。 我能找到的案例:
在每一种情况下,在不改变编译器的情况下解决这些问题的理由是,这将是一个过于激进的改变,而且真正的linter应该完成这项工作。
好消息是最近有一条新规则被合并到tslint
的代码库中,以提供有关这个问题的警告。 据我所知,该规则尚未发布在tslint
的发布版本中。 一旦它被释放,如果你在你的tslint
规则中将strict-boolean-expressions
为true
,那么当你使用一个tslint
表达式的条件时, tslint
会发出警告。
上一篇: Is there a way to force "if" to only accept boolean in TypeScript?