Spec-Zone.ru › ESLint

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 } по умолчанию:

Открыть в Playground
/*eslint no-implicit-coercion: "error"*/

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

Примеры правильного кода для параметра { "boolean": true } по умолчанию:

Открыть в Playground
/*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 } по умолчанию:

Открыть в Playground
/*eslint no-implicit-coercion: "error"*/

const n = +foo;
const n1 = -(-foo);
const n2 = foo - 0;
const n3 = 1 * foo;

Примеры правильного кода для параметра { "number": true } по умолчанию:

Открыть в Playground
/*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 } по умолчанию:

Открыть в Playground
/*eslint no-implicit-coercion: "error"*/

const s = "" + foo;
const s1 = `` + foo;
foo += "";
foo += ``;

Примеры правильного кода для параметра { "string": true } по умолчанию:

Открыть в Playground
/*eslint no-implicit-coercion: "error"*/

const s = String(foo);
foo = String(foo);

disallowTemplateShorthand

На этот параметр не влияет параметр string.

Примеры неправильного кода для параметра { "disallowTemplateShorthand": true }:

Открыть в Playground
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": true }]*/

const s = `${foo}`;

Примеры правильного кода для параметра { "disallowTemplateShorthand": true }:

Открыть в Playground
/*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 } по умолчанию:

Открыть в Playground
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": false }]*/

const s = `${foo}`;

allow

Список allow позволяет переопределить поведение правила и разрешить определённые операторы.

Примеры правильного кода для примера параметра { "allow": ["!!", "~"] }:

Открыть в Playground
/*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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API