Getters and setters provide a way to enforce encapsulation by providing methods that give controlled access to class fields. However, in classes with multiple fields, it is not unusual that copy and paste is used to quickly create the needed getters and setters, which can result in the wrong field being accessed by a getter or setter.
This rule raises an issue in the following cases:
Underscore prefixes for fields are supported, so setX() can assign a value to _x.
The following type of getters and setters are supported:
getX() and setX()
class A {
#y: number = 0;
setY(val: number) { // Noncompliant: field '#y' is not updated
}
}
class A {
#y: number = 0;
setY(val: number) {
this.#y = val;
}
}
get x() and set x()
class A {
_x: number = 0;
#y: number = 0;
get x() { // Noncompliant: field '_x' is not used in the return value
return this.#y;
}
get y() { // Noncompliant: method may not return any value
if (condition) {
return #y;
}
}
}
class A {
_x: number = 0;
#y: number = 0;
get x() {
return this._x;
}
get y() {
if (condition) {
return #y;
}
return 1;
}
}
Object.defineProperty()
let x = 0;
let y = 0;
Object.defineProperty(o, 'x', {
get() { // Noncompliant: variable 'x' is not used in the return value
return y;
}
});
let x = 0;
let y = 0;
Object.defineProperty(o, 'x', {
get() {
return x;
}
});