Spec-Zone.ru › ESLint

prefer-arrow-callback

Требовать использования стрелочных функций для функций обратного вызова

🔧 Можно исправить

Некоторые проблемы, обнаруженные этим правилом, автоматически исправляются с помощью параметра --fix командной строки

❄️ Заморожено

Это правило в настоящее время заморожено, и запросы на добавление новых функций не принимаются.

Стрелочные функции могут стать привлекательной альтернативой функциональным выражениям для функций обратного вызова или аргументов функций.

Например, стрелочные функции автоматически привязаны к окружающей их области видимости/контексту. Это альтернатива принятому до ES6 способу явной привязки функциональных выражений для достижения аналогичного поведения.

Кроме того, стрелочные функции:

  • короче и проще для понимания.

  • лексически привязаны независимо от того, где и когда их вызывают.

Подробности правила

Это правило обнаруживает функциональные выражения, используемые в качестве функций обратного вызова или аргументов функций. Для любого выражения, которое можно заменить стрелочной функцией без изменения результата, будет выдана ошибка.

Следующие примеры будут отмечены:

Открыть в Playground
/* eslint prefer-arrow-callback: "error" */

foo(function(a) { return a; }); // ERROR
// prefer: foo(a => a)

foo(function() { return this.a; }.bind(this)); // ERROR
// prefer: foo(() => this.a)

Случаи, когда стрелочная функция не даст идентичного результата, будут проигнорированы.

Следующие примеры не будут отмечены:

Открыть в Playground
/* eslint prefer-arrow-callback: "error" */

// arrow function callback
foo(a => a); // OK

// generator as callback
foo(function*() { yield; }); // OK

// function expression not used as callback or function argument
const foo = function foo(a) { return a; }; // OK

// unbound function expression callback
foo(function() { return this.a; }); // OK

// recursive named function callback
foo(function bar(n) { return n && n + bar(n - 1); }); // OK

Это правило также поддерживает синтаксис типов TypeScript.

Примеры неправильного кода TypeScript для этого правила:

Открыть в Playground
/*eslint prefer-arrow-callback: "error"*/

foo(function bar(a: string) { a; });

test('foo', function (this: any) {});

Примеры правильного кода TypeScript для этого правила:

Открыть в Playground
/*eslint prefer-arrow-callback: "error"*/

foo((a: string) => a);

const foo = function foo(bar: any) {};

Параметры

Дополнительные настройки поведения этого правила доступны через объект параметров.

По умолчанию: { allowNamedFunctions: false, allowUnboundThis: true }

allowNamedFunctions

По умолчанию { "allowNamedFunctions": false } этот параметр boolean запрещает использовать именованные функции в качестве функций обратного вызова или аргументов функций.

Если изменить это значение на true, поведение параметра изменится на противоположное: именованные функции можно будет использовать без ограничений.

{ "allowNamedFunctions": true } Следующий пример не будет отмечен:

Открыть в Playground
/* eslint prefer-arrow-callback: [ "error", { "allowNamedFunctions": true } ] */

foo(function bar() {});

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

Открыть в Playground
/* eslint prefer-arrow-callback: [ "error", { "allowNamedFunctions": true } ] */

foo(function(a: string) {});

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

Открыть в Playground
/* eslint prefer-arrow-callback: [ "error", { "allowNamedFunctions": true } ] */

foo(function bar(a: string) {});

allowUnboundThis

По умолчанию { "allowUnboundThis": true } этот параметр boolean позволяет использовать функциональные выражения, содержащие this, в качестве функций обратного вызова, если соответствующая функция не была привязана явно.

Если установить значение false, этот параметр полностью запрещает использовать функциональные выражения в качестве функций обратного вызова или аргументов функций.

{ "allowUnboundThis": false } Следующие примеры будут отмечены:

Открыть в Playground
/* eslint prefer-arrow-callback: [ "error", { "allowUnboundThis": false } ] */

foo(function() { this.a; });

foo(function() { (() => this); });

someArray.map(function(item) { return this.doSomething(item); }, someObject);

Примеры неправильного кода TypeScript для этого правила с { "allowUnboundThis": false }:

Открыть в Playground
/* eslint prefer-arrow-callback: [ "error", { "allowUnboundThis": false } ] */

foo(function(a: string) { this; });

foo(function(a: string) { (() => this); });

Когда не следует использовать это правило

  • В средах, которые ещё не поддерживают возможности языка ES6 (ES3/5).

  • В средах ES6+, где допускается использование функциональных выражений для задания функций обратного вызова или аргументов функций.

Версия

Это правило добавлено в ESLint v1.2.0.

Дополнительные материалы

Стрелочные функциональные выражения — JavaScript | MDN
developer.mozilla.org

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/prefer-arrow-callback

Spec-Zone.ru

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