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 }:
/*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
var foo = {
};
Пример правильного кода для этого правила с настройкой "always", { "avoidQuotes": true }:
/*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/
var foo = {
"bar-baz": function() {},
"qux": qux
};
ignoreConstructors
{
"object-shorthand": ["error", "always", { "ignoreConstructors": true }]
}
Пример правильного кода для этого правила с настройкой "always", { "ignoreConstructors": true }:
/*eslint object-shorthand: ["error", "always", { "ignoreConstructors": true }]*/
var foo = {
ConstructorFunction: function() {}
};
methodsIgnorePattern
Пример правильного кода для этого правила с настройкой "always", { "methodsIgnorePattern": "^bar$" }:
/*eslint object-shorthand: ["error", "always", { "methodsIgnorePattern": "^bar$" }]*/
var foo = {
bar: function() {}
};
avoidExplicitReturnArrows
{
"object-shorthand": ["error", "always", { "avoidExplicitReturnArrows": true }]
}
Пример неправильного кода для этого правила с настройкой "always", { "avoidExplicitReturnArrows": true }:
/*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
var foo = {
,
};
Пример правильного кода для этого правила с настройкой "always", { "avoidExplicitReturnArrows": true }:
/*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/
var foo = {
foo(bar, baz) {
return bar + baz;
},
qux: foobar => foobar * 2
};
Пример неправильного кода для этого правила с настройкой "consistent":
/*eslint object-shorthand: [2, "consistent"]*/
var foo = ;
Примеры правильного кода для этого правила с настройкой "consistent":
/*eslint object-shorthand: [2, "consistent"]*/
var foo = {
a: a,
b: "foo"
};
var bar = {
a,
b,
};
Пример неправильного кода с настройкой "consistent-as-needed", которая очень похожа на "consistent":
/*eslint object-shorthand: [2, "consistent-as-needed"]*/
var foo = ;
Когда не следует использовать
Любой, кто ещё не работает в среде ES6, не захочет применять это правило. Другие могут найти краткость синтаксической записи сокращенных форм менее читаемой и не захотят её использовать с этим правилом.
Связанные правила
Версия
Это правило было добавлено в ESLint v0.20.0.
Дополнительные материалы
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/object-shorthand