prefer-arrow-callback
Требовать использования стрелочных функций для функций обратного вызова
Некоторые проблемы, обнаруженные этим правилом, автоматически исправляются с помощью параметра --fix командной строки
Это правило в настоящее время заморожено, и запросы на добавление новых функций не принимаются.
Стрелочные функции могут стать привлекательной альтернативой функциональным выражениям для функций обратного вызова или аргументов функций.
Например, стрелочные функции автоматически привязаны к окружающей их области видимости/контексту. Это альтернатива принятому до ES6 способу явной привязки функциональных выражений для достижения аналогичного поведения.
Кроме того, стрелочные функции:
-
короче и проще для понимания.
-
лексически привязаны независимо от того, где и когда их вызывают.
Подробности правила
Это правило обнаруживает функциональные выражения, используемые в качестве функций обратного вызова или аргументов функций. Для любого выражения, которое можно заменить стрелочной функцией без изменения результата, будет выдана ошибка.
Следующие примеры будут отмечены:
/* eslint prefer-arrow-callback: "error" */
foo(); // ERROR
// prefer: foo(a => a)
foo(.bind(this)); // ERROR
// prefer: foo(() => this.a)
Случаи, когда стрелочная функция не даст идентичного результата, будут проигнорированы.
Следующие примеры не будут отмечены:
/* 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 для этого правила:
/*eslint prefer-arrow-callback: "error"*/
foo();
test('foo', );
Примеры правильного кода TypeScript для этого правила:
/*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 } Следующий пример не будет отмечен:
/* eslint prefer-arrow-callback: [ "error", { "allowNamedFunctions": true } ] */
foo(function bar() {});
Примеры неправильного кода TypeScript для этого правила с { "allowNamedFunctions": true }:
/* eslint prefer-arrow-callback: [ "error", { "allowNamedFunctions": true } ] */
foo();
Примеры правильного кода TypeScript для этого правила с { "allowNamedFunctions": true }:
/* eslint prefer-arrow-callback: [ "error", { "allowNamedFunctions": true } ] */
foo(function bar(a: string) {});
allowUnboundThis
По умолчанию { "allowUnboundThis": true } этот параметр boolean позволяет использовать функциональные выражения, содержащие this, в качестве функций обратного вызова, если соответствующая функция не была привязана явно.
Если установить значение false, этот параметр полностью запрещает использовать функциональные выражения в качестве функций обратного вызова или аргументов функций.
{ "allowUnboundThis": false } Следующие примеры будут отмечены:
/* eslint prefer-arrow-callback: [ "error", { "allowUnboundThis": false } ] */
foo();
foo();
someArray.map(, someObject);
Примеры неправильного кода TypeScript для этого правила с { "allowUnboundThis": false }:
/* eslint prefer-arrow-callback: [ "error", { "allowUnboundThis": false } ] */
foo();
foo();
Когда не следует использовать это правило
-
В средах, которые ещё не поддерживают возможности языка ES6 (ES3/5).
-
В средах ES6+, где допускается использование функциональных выражений для задания функций обратного вызова или аргументов функций.
Версия
Это правило добавлено в ESLint v1.2.0.
Дополнительные материалы
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/prefer-arrow-callback