【发布时间】: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