noDuplicateObjectKeys (since v11.0.0)
This rule is recommended by Rome.
Prevents object literals having more than one property declaration for the same name. If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored, which is likely a mistake.
Examples
Invalid
const obj = {
a: 1,
a: 2,
}
suspicious/noDuplicateObjectKeys.js:2:5 lint/suspicious/noDuplicateObjectKeys FIXABLE ━━━━━━━━━━━━
✖ This property value named a is later overwritten by an object member with the same name.
1 │ const obj = {
> 2 │ a: 1,
│ ^^^^
3 │ a: 2,
4 │ }
ℹ Overwritten with this value.
1 │ const obj = {
2 │ a: 1,
> 3 │ a: 2,
│ ^^^^
4 │ }
5 │
ℹ If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
ℹ Suggested fix: Remove this property value named a
1 1 │ const obj = {
2 │ - ···→ a:·1,
3 │ - ···→ a:·2,
2 │ + ···→ a:·2,
4 3 │ }
5 4 │
const obj = {
set a(v) {},
a: 2,
}
suspicious/noDuplicateObjectKeys.js:2:5 lint/suspicious/noDuplicateObjectKeys FIXABLE ━━━━━━━━━━━━
✖ This setter named a is later overwritten by an object member with the same name.
1 │ const obj = {
> 2 │ set a(v) {},
│ ^^^^^^^^^^^
3 │ a: 2,
4 │ }
ℹ Overwritten with this value.
1 │ const obj = {
2 │ set a(v) {},
> 3 │ a: 2,
│ ^^^^
4 │ }
5 │
ℹ If an object property with the same name is defined multiple times (except when combining a getter with a setter), only the last definition makes it into the object and previous definitions are ignored.
ℹ Suggested fix: Remove this setter named a
1 1 │ const obj = {
2 │ - ···→ set·a(v)·{},
3 │ - ···→ a:·2,
2 │ + ···→ a:·2,
4 3 │ }
5 4 │
Valid
const obj = {
a: 1,
b: 2,
}
const obj = {
get a() { return 1; },
set a(v) {},
}