Description
In strict mode (strict: true
, inside a class or inside a module), duplicated property names get two errors instead of one:
// @strict: false
const first = { a: 1, a: 2 }
class C {
m() {
const second = { a: 1, a: 2 }
return second.a
}
}
Expected: one error on each a: 2
.
Actual: two errors on the a: 2
inside the class:
- Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode
- Diagnostics.Duplicate_identifier_0
In fact, the first error is better, but isn't used for first
;
Expected: On first
s a: 2
, the error should be "An object literal cannot have multiple properties with the same name."
Actual: Duplicate identifier 'a'.
This inconsistency arose because Typescript originally targetted ES3 and ES5; duplicate property names are only an error in ES5's strict mode. In fact, they're not even an error in ES2015+'s strict mode. But this is a good error, and it should apply everywhere.
Expected: The error should be "An object literal cannot have multiple properties with the same name."
Actual: "An object literal cannot have multiple properties with the same name in strict mode."
Thanks to https://stackoverflow.com/questions/36321790/js-two-or-more-object-properties-with-the-same-name-in-non-strict-mode for pointing out the spec changes.