Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
sandersn opened this issue Nov 15, 2021 · 1 comment

Comments

Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
@sandersn
Copy link
Member

@sandersn sandersn commented Nov 15, 2021

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.

@fatcerberus
Copy link

@fatcerberus fatcerberus commented Nov 16, 2021

In strict mode (strict: true, inside a class or inside a module)

Wait, is this talking about JavaScript strict mode, or TypeScript strict: true?

Loading

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment