镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Use unique symbol for well-known symbols #21603

Description

@falsandtru

Expected behavior:

interface SymbolConstructor {
    readonly iterator: unique symbol;
}

Actual behavior:

interface SymbolConstructor {
    readonly iterator: symbol;
}

Activity

  1. RyanCavanaugh commented on Feb 5, 2018

    @RyanCavanaugh
    Member
  2. falsandtru commented on Feb 5, 2018

    @falsandtru
    ContributorAuthor

    If we do this update, we need a fix like #20018.

  3. rbuckton commented on Feb 5, 2018

    @rbuckton
    Contributor

    We can't fix this in the core library because of NodeJS, Core-JS, ES6-Shim, etc. also defining these as symbol. I hope to get "lib" references in soon so that we can change NodeJS et. al. to reference the definitions in lib.es2016.symbol.wellknown.d.ts and then make this change.

  4. RyanCavanaugh commented on Aug 22, 2018

    @RyanCavanaugh
    Member

    Ron Buckton (@rbuckton) lib references are in, what should we do here?

  5. rbuckton commented on Aug 22, 2018

    @rbuckton
    Contributor

    We unfortunately run into collisions in type definitions for packages like NodeJS that forward-declare some symbols. #26568 would help us to get to the point where the NodeJS type definitions could use /// <reference lib="..." /> without breaking in older versions of the compiler.

  6. weswigham commented on Aug 23, 2018

    @weswigham
    Member

    #24738 fixes this gracefully with older versions of the node.d.ts by just assuming that if you wrote symbol under the global SymbolConstructor you meant to say unique symbol.

  7. rbuckton commented on Aug 23, 2018

    @rbuckton
    Contributor

    #24738 fixes this gracefully with older versions of the node.d.ts by just assuming that if you wrote symbol under the global SymbolConstructor you meant to say unique symbol.

    I know we considered this, but it was more of a workaround. We need something like #26568 for other reasons and its more maintainable going forward.

  8. weswigham commented on Aug 23, 2018

    @weswigham
    Member

    That won't really help the community upgrade as much, though - they'll be forced to try and update their entire type heirarchy to depending on the latest version of all the declaration files. The workaround has the advantage that older declaration files continue to work (and continue to work with older versions of TS) and can be updated as needed.

  9. rbuckton commented on Aug 23, 2018

    @rbuckton
    Contributor

    they'll be forced to try and update their entire type heirarchy to depending on the latest version of all the declaration files.

    This is usually the case when types are updated in a dependency. On definitely typed there are only a handful of packages that introduce this kind collision, which we can address easily enough once #26568 has landed in a development build. I'm not saying that the symbol to unique symbol workaround might not still be needed, but its possible it won't be.

  10. ntninja commented on Sep 13, 2018

    @ntninja

    Sorry for being a bother, but now that #26568 has been merged, is it possible to revisit this for TS 3.1?

  11. ExE-Boss commented on Jan 3, 2020

    @ExE-Boss
    Contributor

    #24738 would fix this in a manner that’s compatible with old .d.ts files.

  12. mmis1000 commented on Jan 15, 2021

    @mmis1000

    Looks like this is a blocker to define correct Array::concat signature.

    The Array::concat decides whether they should spread the argument based on Symbol.isConcatSpreadable

    But Symbol.isConcatSpreadable is a symbol currently.

    Note:
    The incorrect code below passed the type check.

    const a: number[][] = [[0]]
    const b: number[][] = a.concat([0])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    RevisitAn issue worth coming back toSuggestionAn idea for TypeScript

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions