版本

no-implicit-coercion

禁止简写类型转换

🔧 可修复

此规则报告的一些问题可以通过--fix 命令行选项自动修复。

💡 有建议

此规则报告的一些问题可以通过编辑器建议手动修复。

在 JavaScript 中,有许多不同的方法可以转换值类型。其中一些可能难以阅读和理解。

例如

var b = !!foo;
var b = ~foo.indexOf(".");
var n = +foo;
var n = -(-foo);
var n = foo - 0;
var n = 1 * foo;
var s = "" + foo;
foo += ``;

这些可以用以下代码替换

var b = Boolean(foo);
var b = foo.indexOf(".") !== -1;
var n = Number(foo);
var n = Number(foo);
var n = Number(foo);
var n = Number(foo);
var s = String(foo);
foo = String(foo);

规则详情

此规则旨在标记类型转换的较短表示法,然后建议更具自解释性的表示法。

选项

此规则有三个主要选项和一个覆盖选项以允许根据需要进行一些强制转换。

  • "boolean"(默认值为true) - 当此值为true时,此规则会警告boolean类型的较短类型转换。
  • "number"(默认值为true) - 当此值为true时,此规则会警告number类型的较短类型转换。
  • "string"(默认值为true) - 当此值为true时,此规则会警告string类型的较短类型转换。
  • "disallowTemplateShorthand"(默认值为false) - 当此值为true时,此规则会警告使用${expression}形式的string类型转换。
  • "allow"(默认值为empty) - 此数组中的每个条目可以是~!!+- --*,这些是要允许的。

请注意,allow列表中的运算符+将允许+foo(数字强制转换)以及"" + foo(字符串强制转换)。

布尔值

对于默认的{ "boolean": true }选项,不正确代码的示例

在在线运行中打开
/*eslint no-implicit-coercion: "error"*/

var b = !!foo;
var b = ~foo.indexOf(".");
// bitwise not is incorrect only with `indexOf`/`lastIndexOf` method calling.

对于默认的{ "boolean": true }选项,正确代码的示例

在在线运行中打开
/*eslint no-implicit-coercion: "error"*/

var b = Boolean(foo);
var b = foo.indexOf(".") !== -1;

var n = ~foo; // This is a just bitwise not.

数字

对于默认的{ "number": true }选项,不正确代码的示例

在在线运行中打开
/*eslint no-implicit-coercion: "error"*/

var n = +foo;
var n = -(-foo);
var n = foo - 0;
var n = 1 * foo;

对于默认的{ "number": true }选项,正确代码的示例

在在线运行中打开
/*eslint no-implicit-coercion: "error"*/

var n = Number(foo);
var n = parseFloat(foo);
var n = parseInt(foo, 10);

var n = foo * 1/4; // `* 1` is allowed when followed by the `/` operator

字符串

对于默认的{ "string": true }选项,不正确代码的示例

在在线运行中打开
/*eslint no-implicit-coercion: "error"*/

var s = "" + foo;
var s = `` + foo;
foo += "";
foo += ``;

对于默认的{ "string": true }选项,正确代码的示例

在在线运行中打开
/*eslint no-implicit-coercion: "error"*/

var s = String(foo);
foo = String(foo);

disallowTemplateShorthand

此选项不受string选项的影响。

对于{ "disallowTemplateShorthand": true }选项,不正确代码的示例

在在线运行中打开
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": true }]*/

var s = `${foo}`;

对于{ "disallowTemplateShorthand": true }选项,正确代码的示例

在在线运行中打开
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": true }]*/

var s = String(foo);

var s = `a${foo}`;

var s = `${foo}b`;

var s = `${foo}${bar}`;

var s = tag`${foo}`;

对于默认的{ "disallowTemplateShorthand": false }选项,正确代码的示例

在在线运行中打开
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": false }]*/

var s = `${foo}`;

允许

使用allow列表,我们可以覆盖并允许特定的运算符。

对于示例{ "allow": ["!!", "~"] }选项,正确代码的示例

在在线运行中打开
/*eslint no-implicit-coercion: [2, { "allow": ["!!", "~"] } ]*/

var b = !!foo;
var b = ~foo.indexOf(".");

何时不使用它

如果您不想收到有关类型转换较短表示法的通知,可以安全地禁用此规则。

版本

此规则在 ESLint v1.0.0-rc-2 中引入。

资源

更改语言