【问题标题】:ESLint + TypeScript + Stricter if statementsESLint + TypeScript + 更严格的 if 语句
【发布时间】:2020-10-09 02:34:20
【问题描述】:

我目前在我的 TypeScript 项目中发现了一个非常微妙的错误:

const makeDecision = (): Promise<boolean> => {
  return Promise.resolve(false);
};

const shouldDoIt = makeDecision(); // Oops! I forgot the await

if (shouldDoIt) {
  // do stuff
}

(我刚才是手写的,所以可能有错误......)

在这个特定的示例中,我忘记了 await 关键字,它导致 shouldDoIt 成为 Promise,而不是 boolean。所以,在if-statement 中它总是真实的。因为这对 JavaScript 来说是有效的行为,所以 TypeScript 编译器不会抱怨,即使这不是我的意图。显然,计算机不会神奇地知道我的意图,但如果需要,编译器可以非常严格。

有没有办法将 ESLint 或 TypeScript 编译器配置为对 if 语句更加严格,只允许 boolean,而不是真值类型?理想情况下,我希望编译器或 ESLint 因以下语句而失败:

if ("a string") {
}

if (null) {
}

if (someNumber) {
}

【问题讨论】:

    标签: typescript eslint


    【解决方案1】:

    typescript-eslint 规则 strict-boolean-expressions 可以满足您的需求。此外,no-unnecessary-condition 规则也会抓住你的情况。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • @ArghyaSadhu 答案已更新,包含基本信息。
    猜你喜欢
    • 2013-11-01
    • 2020-04-05
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2021-06-01
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多