Skip to content

"No repeated property names" error in object literals is duplicated in strict mode #46815

Closed
@sandersn

Description

@sandersn

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:

  1. Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode
  2. Diagnostics.Duplicate_identifier_0

In fact, the first error is better, but isn't used for first;

Expected: On firsts 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptDomain: Error MessagesThe issue relates to error messagingGood First IssueWell scoped, documented and has the green lightHelp WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions