Без неявного приведения типов
Запретить сокращенные преобразования типов
Некоторые проблемы, выявленные этим правилом, автоматически исправимы с помощью параметра --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, это правило предупреждает о преобразованиях типаstringс использованием формы${expression}. -
"allow"(emptyпо умолчанию) - Каждый элемент в этом массиве может быть одним из~,!!,+,- -,-, или*для разрешения.
Обратите внимание, что оператор + в списке allow также позволит +foo (преобразование к числу), а также "" + foo (преобразование к строке).
boolean
Примеры неправильного кода для параметра { "boolean": true } по умолчанию:
/*eslint no-implicit-coercion: "error"*/
var b = ;
var b = ;
// 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
Примеры неправильного кода для параметра { "number": true } по умолчанию:
/*eslint no-implicit-coercion: "error"*/
var n = ;
var n = ;
var n = ;
var n = ;
Примеры правильного кода для параметра { "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
Примеры неправильного кода для параметра { "string": true } по умолчанию:
/*eslint no-implicit-coercion: "error"*/
var s = ;
var s = ;
;
;
Примеры правильного кода для параметра { "string": true } по умолчанию:
/*eslint no-implicit-coercion: "error"*/
var s = String(foo);
foo = String(foo);
Запретить сокращенные шаблоны
Этот параметр не затрагивает параметр string.
Примеры неправильного кода для параметра { "disallowTemplateShorthand": true }:
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": true }]*/
var s = ;
Примеры правильного кода для параметра { "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.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-implicit-coercion