Spec-Zone.ru › ESLint

object-shorthand

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

🔧 Исправимый

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

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

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

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

// methods
var foo = {
    a: function() {},
    b: function() {}
};

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

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

// methods
var foo = {
    a() {},
    b() {}
};

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

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

Каждое из следующих свойств вызовет предупреждение:

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

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

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

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

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

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

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

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

Настройки

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

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

Вы можете установить настройку в конфигурации так:

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

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

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

avoidQuotes

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

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

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

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

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

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

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

ignoreConstructors

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

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

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

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

methodsIgnorePattern

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

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

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

avoidExplicitReturnArrows

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

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

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

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

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

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

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

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

  qux: foobar => foobar * 2
};

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

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

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

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

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

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

var bar = {
    a,
    b,
};

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

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

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

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

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

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

  • no-useless-rename

Версия

Это правило было добавлено в ESLint v0.20.0.

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

Литералы объектов - JavaScript | MDN

Ресурсы

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

© 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