有没有办法强制“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打字为我检查这种错误?


编译器不会这样做,我不希望它很快就能做到。 它已被问及多次拒绝。 我能找到的案例:

  • 2016年2月:https://github.com/Microsoft/TypeScript/issues/7306
  • 2016年4月:https://github.com/Microsoft/TypeScript/issues/8178
  • 2016年7月:https://github.com/Microsoft/TypeScript/issues/9702
  • 在每一种情况下,在不改变编译器的情况下解决这些问题的理由是,这将是一个过于激进的改变,而且真正的linter应该完成这项工作。

    好消息是最近有一条新规则被合并到tslint的代码库中,以提供有关这个问题的警告。 据我所知,该规则尚未发布在tslint的发布版本中。 一旦它被释放,如果你在你的tslint规则中将strict-boolean-expressionstrue ,那么当你使用一个tslint表达式的条件时, tslint会发出警告。

    链接地址: http://www.djcxy.com/p/37615.html

    上一篇: Is there a way to force "if" to only accept boolean in TypeScript?

    下一篇: MWS Feeds Update Quantities in php