Spec-Zone.ru › ESLint

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;

Это правило призвано обеспечить единообразие инициализации и объявления переменных.

Параметры

Правило принимает два параметра:

  1. Строка, значение которой должно быть либо "always" (по умолчанию), чтобы требовать инициализацию при объявлении, либо "never", чтобы запрещать инициализацию при объявлении. Это правило применяется к переменным var, let, const, using и await using, однако "never" игнорируется для переменных const, using и await using, поскольку отсутствие инициализации таких переменных приведёт к ошибке разбора.
  2. Объект, дополнительно управляющий поведением этого правила. Сейчас доступен только параметр ignoreForLoopInit, который указывает, разрешена ли инициализация при объявлении в циклах for, если задано значение "never", поскольку это очень распространённый сценарий.

Настроить правило можно следующим образом:

Переменные должны инициализироваться при объявлении (по умолчанию)

{
    "init-declarations": ["error", "always"],
}

Переменные не должны инициализироваться при объявлении

{
    "init-declarations": ["error", "never"]
}

Переменные не должны инициализироваться при объявлении, за исключением циклов for, где это разрешено

{
    "init-declarations": ["error", "never", { "ignoreForLoopInit": true }]
}

always

Примеры некорректного кода для параметра "always" по умолчанию:

Открыть в Playground
/*eslint init-declarations: ["error", "always"]*/

function foo() {
    var bar;
    let baz;
}

Примеры корректного кода для параметра "always" по умолчанию:

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

Открыть в Playground
/*eslint init-declarations: ["error", "never"]*/

function foo() {
    var bar = 1;
    let baz = 2;

    for (let i = 0; i < 1; i++) {}
}

Примеры корректного кода для параметра "never":

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

Открыть в Playground
/*eslint init-declarations: ["error", "never", { "ignoreForLoopInit": true }]*/
for (let i = 0; i < 1; i++) {}

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

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

Открыть в Playground
/* eslint init-declarations: ["error", "never"] */

let arr: string[] = ['arr', 'ar'];

const class1 = class NAME {
	constructor() {
	  var name1: string = 'hello';
	}
};

namespace myLib {
	let numberOfGreetings: number = 2;
}

Открыть в Playground
/* eslint init-declarations: ["error", "always"] */

namespace myLib {
	let numberOfGreetings: number;
}

namespace myLib1 {
	const foo: number;
	namespace myLib2 {
	  let bar: string;
	  namespace myLib3 {
		let baz: object;
	  }
	}
}

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

Открыть в Playground
/* eslint init-declarations: ["error", "never"] */

declare const foo: number;

declare namespace myLib {
	let numberOfGreetings: number;
}

interface GreetingSettings {
	greeting: string;
	duration?: number;
	color?: string;
}
Открыть в Playground
/* eslint init-declarations: ["error", "always"] */

declare const foo: number;

declare namespace myLib {
	let numberOfGreetings: number;
}

interface GreetingSettings {
	greeting: string;
	duration?: number;
	color?: string;
}

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

Если вам безразлично, как инициализируются переменные.

Связанные правила

  • no-unassigned-vars

Версия

Это правило добавлено в ESLint v1.0.0-rc-1.

Ресурсы

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

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

Spec-Zone.ru

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