Spec-Zone.ru › ESLint

object-shorthand

Требовать или запрещать сокращённый синтаксис методов и свойств в литералах объектов

🔧 Исправляемое

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

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

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

ECMAScript 6 предоставляет краткую форму для определения методов и свойств литералов объектов. Этот синтаксис может значительно упростить определение сложных литералов объектов.

Вот несколько распространённых примеров с использованием синтаксиса ES5:

// properties
const foo = {
    x: x,
    y: y,
    z: z,
};

// methods
const bar = {
    a: function() {},
    b: function() {}
};

А теперь эквивалентные варианты на ES6:

// properties
const foo = {x, y, z};

// methods
const bar = {
    a() {},
    b() {}
};

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

Это правило требует использования сокращённого синтаксиса. Оно применяется ко всем методам (включая генераторы), определённым в литералах объектов, а также к свойствам, у которых имя ключа совпадает с именем присваиваемой переменной.

Для каждого из следующих свойств будет выдано предупреждение:

/*eslint object-shorthand: "error"*/

const foo = {
    w: function() {},
    x: function *() {},
    [y]: function() {},
    z: z
};

В этом случае ожидался бы следующий синтаксис:

/*eslint object-shorthand: "error"*/

const foo = {
    w() {},
    *x() {},
    [y]() {},
    z
};

Это правило не отмечает стрелочные функции внутри литералов объектов. Следующий код не вызовет предупреждение:

/*eslint object-shorthand: "error"*/

const foo = {
    x: (y) => y
};

Параметры

Правило принимает параметр, задающий, когда его следует применять. Ему можно присвоить одно из следующих значений:

  • "always" (по умолчанию) требует использовать сокращённый синтаксис везде, где это возможно.
  • "methods" требует использовать сокращённый синтаксис методов (также применяется к генераторам).
  • "properties" требует использовать сокращённый синтаксис свойств (если имена ключа и переменной совпадают).
  • "never" требует не использовать сокращённый синтаксис свойств и методов в литералах объектов.
  • "consistent" требует использовать в литерале объекта либо только сокращённый синтаксис, либо только полную форму.
  • "consistent-as-needed" требует использовать в литерале объекта либо только сокращённый синтаксис, либо только полную форму, но при этом всегда выбирать сокращённую форму, если это возможно.

Параметр можно задать в конфигурации следующим образом:

{
    "object-shorthand": ["error", "always"]
}

Кроме того, правило принимает необязательную конфигурацию в виде объекта:

  • "avoidQuotes": true указывает, что предпочтительна полная форма синтаксиса, если ключ объекта — строковый литерал (по умолчанию: false). Обратите внимание: этот параметр можно включить, только если для строкового параметра задано значение "always", "methods" или "properties".
  • "ignoreConstructors": true можно использовать, чтобы правило не сообщало об ошибках для функций-конструкторов. (По умолчанию правило рассматривает конструкторы так же, как и другие функции.) Обратите внимание: этот параметр можно включить, только если для строкового параметра задано значение "always" или "methods".
  • "methodsIgnorePattern" (string): для методов, имена которых соответствуют этому шаблону регулярного выражения, требование использовать сокращённый синтаксис методов не применяется. Обратите внимание: этот параметр можно использовать, только если для строкового параметра задано значение "always" или "methods".
  • "avoidExplicitReturnArrows": true указывает, что для свойств-функций предпочтительны методы, а не стрелочные функции с явным возвратом. (По умолчанию правило допускает оба варианта.) Обратите внимание: этот параметр можно включить, только если для строкового параметра задано значение "always" или "methods".

avoidQuotes

{
    "object-shorthand": ["error", "always", { "avoidQuotes": true }]
}

Пример некорректного кода для этого правила с параметром "always", { "avoidQuotes": true }:

Открыть в Playground
/*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/

const foo = {
    "bar-baz"() {}
};

Пример корректного кода для этого правила с параметром "always", { "avoidQuotes": true }:

Открыть в Playground
/*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/

const foo = {
    "bar-baz": function() {},
    "qux": qux
};

ignoreConstructors

{
    "object-shorthand": ["error", "always", { "ignoreConstructors": true }]
}

Пример корректного кода для этого правила с параметром "always", { "ignoreConstructors": true }:

Открыть в Playground
/*eslint object-shorthand: ["error", "always", { "ignoreConstructors": true }]*/

const foo = {
    ConstructorFunction: function() {}
};

methodsIgnorePattern

Пример корректного кода для этого правила с параметром "always", { "methodsIgnorePattern": "^bar$" }:

Открыть в Playground
/*eslint object-shorthand: ["error", "always", { "methodsIgnorePattern": "^bar$" }]*/

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

avoidExplicitReturnArrows

{
    "object-shorthand": ["error", "always", { "avoidExplicitReturnArrows": true }]
}

Пример некорректного кода для этого правила с параметром "always", { "avoidExplicitReturnArrows": true }:

Открыть в Playground
/*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/

const foo = {
  foo:(bar, baz)=>{return bar + baz;},

  qux:(foobar)=>{return foobar *2;}
};

Пример корректного кода для этого правила с параметром "always", { "avoidExplicitReturnArrows": true }:

Открыть в Playground
/*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/

const foo = {
  foo(bar, baz) {
    return bar + baz;
  },

  qux: foobar => foobar * 2
};

Пример некорректного кода для этого правила с параметром "consistent":

Открыть в Playground
/*eslint object-shorthand: [2, "consistent"]*/

const foo = {    a,b:"foo",};

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

Открыть в Playground
/*eslint object-shorthand: [2, "consistent"]*/

const foo = {
    a: a,
    b: "foo"
};

const bar = {
    a,
    b,
};

Пример некорректного кода с параметром "consistent-as-needed", который очень похож на "consistent":

Открыть в Playground
/*eslint object-shorthand: [2, "consistent-as-needed"]*/

const foo = {a: a,b: b,};

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

Тем, кто ещё не использует среду ES6, не следует применять это правило. Другим может показаться, что краткий синтаксис труднее читать, и они могут не захотеть поощрять его использование с помощью этого правила.

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

  • no-useless-rename

Версия

Это правило появилось в ESLint v0.20.0.

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

Инициализатор объекта — JavaScript | MDN
developer.mozilla.org

Ресурсы

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

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

Spec-Zone.ru

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