有没有办法强制"if"只接受TypeScript中的布尔值?

Pin*_*yin 9 typescript

以下代码在TypeScript中是合法的:

let asyncCondition = async(): Promise<boolean> => // .. calculate & return a boolean
if(asyncCondition()){ // forgot to await. condition is always true
  // .. do stuff
}
Run Code Online (Sandbox Code Playgroud)

由于asyncCondition()返回正常的非null Promise,因此if块中的代码将始终执行.这是JavaScript行为,TypeScript不会抱怨是可以理解的.

但在上面的场景中,我真正的意思是:

let asyncCondition = async(): Promise<boolean> => // .. calculate & return a boolean
if(await asyncCondition()){ // condition is asyncCondition()
  // .. do stuff
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让TypeScript为我检查这种错误?

Lou*_*uis 5

编译器不会执行此操作,并且我希望它不会在不久的将来执行此操作。已被询问并拒绝多次。我能找到的情况:

在每种情况下,在不更改编译器的情况下关闭这些问题的理由是,这将是一个过于彻底的更改,而实际上,lint应该可以完成这项工作。

好消息是,最近有一条新规则合并到tslint的代码库中,以提供有关此问题的警告。据我所知,该规则尚未在的发行版本中tslint。释放后,如果您在规则中设置strict-boolean-expressions为,则当您使用条件且表达式不是严格布尔值时,将向您发出警告。truetslinttslint