init-declarations
Требовать или запрещать инициализацию в объявлениях переменных
Это правило в настоящее время заморожено, и предложения по новым функциям не принимаются.
В JavaScript переменным можно присваивать значения при объявлении или в любой момент после него с помощью инструкции присваивания. Например, в следующем коде foo инициализируется при объявлении, а bar — позже.
let foo = 1;
let bar;
if (foo) {
bar = 1;
} else {
bar = 2;
}
Подробности правила
Это правило предназначено для того, чтобы требовать или запрещать инициализацию переменных при объявлении. Например, в следующем коде foo инициализируется при объявлении, а bar — нет.
let foo = 1;
let bar;
bar = 2;
Это правило призвано обеспечить единообразие инициализации и объявления переменных.
Параметры
Правило принимает два параметра:
- Строка, значение которой должно быть либо
"always"(по умолчанию), чтобы требовать инициализацию при объявлении, либо"never", чтобы запрещать инициализацию при объявлении. Это правило применяется к переменнымvar,let,const,usingиawait using, однако"never"игнорируется для переменныхconst,usingиawait using, поскольку отсутствие инициализации таких переменных приведёт к ошибке разбора. - Объект, дополнительно управляющий поведением этого правила. Сейчас доступен только параметр
ignoreForLoopInit, который указывает, разрешена ли инициализация при объявлении в циклахfor, если задано значение"never", поскольку это очень распространённый сценарий.
Настроить правило можно следующим образом:
Переменные должны инициализироваться при объявлении (по умолчанию)
{
"init-declarations": ["error", "always"],
}
Переменные не должны инициализироваться при объявлении
{
"init-declarations": ["error", "never"]
}
Переменные не должны инициализироваться при объявлении, за исключением циклов for, где это разрешено
{
"init-declarations": ["error", "never", { "ignoreForLoopInit": true }]
}
always
Примеры некорректного кода для параметра "always" по умолчанию:
/*eslint init-declarations: ["error", "always"]*/
function foo() {
var ;
let ;
}
Примеры корректного кода для параметра "always" по умолчанию:
/*eslint init-declarations: ["error", "always"]*/
function foo() {
var bar = 1;
let baz = 2;
const qux = 3;
using quux = getSomething();
}
async function foobar() {
await using quux = getSomething();
}
never
Примеры некорректного кода для параметра "never":
/*eslint init-declarations: ["error", "never"]*/
function foo() {
var ;
let ;
for (let ; i < 1; i++) {}
}
Примеры корректного кода для параметра "never":
/*eslint init-declarations: ["error", "never"]*/
function foo() {
var bar;
let baz;
const buzz = 1;
using quux = getSomething();
}
async function foobar() {
await using quux = getSomething();
}
Параметр "never" игнорирует инициализацию переменных const, using и await using.
ignoreForLoopInit
Примеры корректного кода для параметров "never", { "ignoreForLoopInit": true }:
/*eslint init-declarations: ["error", "never", { "ignoreForLoopInit": true }]*/
for (let i = 0; i < 1; i++) {}
Это правило также поддерживает синтаксис типов TypeScript.
Примеры некорректного кода TypeScript для этого правила:
/* eslint init-declarations: ["error", "never"] */
let ;
const class1 = class NAME {
constructor() {
var ;
}
};
namespace myLib {
let ;
}
/* eslint init-declarations: ["error", "always"] */
namespace myLib {
let ;
}
namespace myLib1 {
const ;
namespace myLib2 {
let ;
namespace myLib3 {
let ;
}
}
}
Примеры корректного кода TypeScript для этого правила:
/* eslint init-declarations: ["error", "never"] */
declare const foo: number;
declare namespace myLib {
let numberOfGreetings: number;
}
interface GreetingSettings {
greeting: string;
duration?: number;
color?: string;
}
/* eslint init-declarations: ["error", "always"] */
declare const foo: number;
declare namespace myLib {
let numberOfGreetings: number;
}
interface GreetingSettings {
greeting: string;
duration?: number;
color?: string;
}
Когда не следует использовать это правило
Если вам безразлично, как инициализируются переменные.
Связанные правила
Версия
Это правило добавлено в ESLint v1.0.0-rc-1.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/init-declarations