no-dupe-class-members
Disallow two class members with the same name
error by default
When a class declares two methods with the same name, the last one silently replaces the first. Calls run the second method, and edits to the first one have no effect.
A getter and a setter with the same name are a pair, so they're allowed. So are a static member and an instance member with the same name, and name next to the private #name.
This rule is on by default in JavaScript files. It's off in TypeScript files, where TypeScript reports the same mistake.
Configure#
On by default as an error. To turn it off:
bunfig.toml
[lint.rules]
"no-dupe-class-members" = "off" # or "warn"Examples#
example.js1 problem
class Cart {
total() {
return this.items.length;
}
totalDuplicate name total.() {
return this.items.reduce((sum, item) => sum + item.price, 0);
}
}example.jsNo problems
class Cart {
count() {
return this.items.length;
}
total() {
return this.items.reduce((sum, item) => sum + item.price, 0);
}
}example.jsNo problems
class Cart {
#discount = 0;
get discount() {
return this.#discount;
}
set discount(value) {
this.#discount = value;
}
static discount() {
return new Cart();
}
}A field and a method with the same name are reported too:
example.js1 problem
class Cart {
total = 0;
totalDuplicate name total.() {
return this.items.length;
}
}In TypeScript, overload signatures don't count:
example.tsNo problems
class Cart {
add(id: string): void;
add(id: string, quantity: number): void;
add(id: string, quantity = 1) {
this.items.push({ id, quantity });
}
}