no-implicit-coercion
Запретить сокращённые преобразования типов
Некоторые проблемы, о которых сообщает это правило, можно автоматически исправить с помощью параметра командной строки --fix
Некоторые проблемы, о которых сообщает это правило, можно исправить вручную с помощью предложений редактора
Это правило в настоящее время заморожено и не принимает запросы на добавление функций.
В JavaScript существует множество способов преобразования типов значений. Некоторые из них могут быть трудны для чтения и понимания.
Например:
const b = !!foo;
const b1 = ~foo.indexOf(".");
const n = +foo;
const n1 = -(-foo);
const n2 = foo - 0;
const n3 = 1 * foo;
const s = "" + foo;
foo += ``;
Их можно заменить следующим кодом:
const b = Boolean(foo);
const b1 = foo.indexOf(".") !== -1;
const n = Number(foo);
const n1 = Number(foo);
const n2 = Number(foo);
const n3 = Number(foo);
const 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"*/
const b = ;
const b1 = ;
// bitwise not is incorrect only with `indexOf`/`lastIndexOf` method calling.
Примеры правильного кода для параметра { "boolean": true } по умолчанию:
/*eslint no-implicit-coercion: "error"*/
const b = Boolean(foo);
const b1 = foo.indexOf(".") !== -1;
const n = ~foo; // This is a just bitwise not.
number
Примеры неправильного кода для параметра { "number": true } по умолчанию:
/*eslint no-implicit-coercion: "error"*/
const n = ;
const n1 = ;
const n2 = ;
const n3 = ;
Примеры правильного кода для параметра { "number": true } по умолчанию:
/*eslint no-implicit-coercion: "error"*/
const n = Number(foo);
const n1 = parseFloat(foo);
const n2 = parseInt(foo, 10);
const n3 = foo * 1/4; // `* 1` is allowed when followed by the `/` operator
string
Примеры неправильного кода для параметра { "string": true } по умолчанию:
/*eslint no-implicit-coercion: "error"*/
const s = ;
const s1 = ;
;
;
Примеры правильного кода для параметра { "string": true } по умолчанию:
/*eslint no-implicit-coercion: "error"*/
const s = String(foo);
foo = String(foo);
disallowTemplateShorthand
На этот параметр не влияет параметр string.
Примеры неправильного кода для параметра { "disallowTemplateShorthand": true }:
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": true }]*/
const s = ;
Примеры правильного кода для параметра { "disallowTemplateShorthand": true }:
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": true }]*/
const s = String(foo);
const s1 = `a${foo}`;
const s2 = `${foo}b`;
const s3 = `${foo}${bar}`;
const s4 = tag`${foo}`;
Примеры правильного кода для параметра { "disallowTemplateShorthand": false } по умолчанию:
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": false }]*/
const s = `${foo}`;
allow
Список allow позволяет переопределить поведение правила и разрешить определённые операторы.
Примеры правильного кода для примера параметра { "allow": ["!!", "~"] }:
/*eslint no-implicit-coercion: [2, { "allow": ["!!", "~"] } ]*/
const b = !!foo;
const b1 = ~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