It’s a common mistake in JavaScript to create an object with just a setter for a property but never have a corresponding getter defined for it. Without a getter, you cannot read the property, so it ends up not being used.
Here are some examples:
// Bad var o = { set a(value) { this.val = value; } }; // Good var o = { set a(value) { this.val = value; }, get a() { return this.val; } };
This rule warns if setters are defined without getters. Using an option getWithoutSet
, it will warn if you have a getter without a setter also.
This rule enforces a style where it requires to have a getter for every property which has a setter defined.
By activating the option getWithoutSet
it enforces the presence of a setter for every property which has a getter defined.
setWithoutGet
set to true
will warn for setters without getters (Default true
).getWithoutSet
set to true
will warn for getters without setters (Default false
).Examples of incorrect code for the default { "setWithoutGet": true }
option:
/*eslint accessor-pairs: "error"*/ var o = { set a(value) { this.val = value; } }; var o = {d: 1}; Object.defineProperty(o, 'c', { set: function(value) { this.val = value; } });
Examples of correct code for the default { "setWithoutGet": true }
option:
/*eslint accessor-pairs: "error"*/ var o = { set a(value) { this.val = value; }, get a() { return this.val; } }; var o = {d: 1}; Object.defineProperty(o, 'c', { set: function(value) { this.val = value; }, get: function() { return this.val; } });
Examples of incorrect code for the { "getWithoutSet": true }
option:
/*eslint accessor-pairs: ["error", { "getWithoutSet": true }]*/ var o = { set a(value) { this.val = value; } }; var o = { get a() { return this.val; } }; var o = {d: 1}; Object.defineProperty(o, 'c', { set: function(value) { this.val = value; } }); var o = {d: 1}; Object.defineProperty(o, 'c', { get: function() { return this.val; } });
Examples of correct code for the { "getWithoutSet": true }
option:
/*eslint accessor-pairs: ["error", { "getWithoutSet": true }]*/ var o = { set a(value) { this.val = value; }, get a() { return this.val; } }; var o = {d: 1}; Object.defineProperty(o, 'c', { set: function(value) { this.val = value; }, get: function() { return this.val; } });
You can turn this rule off if you are not concerned with the simultaneous presence of setters and getters on objects.
This rule was introduced in ESLint 0.22.0.
© JS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/rules/accessor-pairs