Skip to content

JSDoc missing syntax for new Map<string, string>() #38876

Open
@Raynos

Description

@Raynos

TypeScript Version: 3.7.x-dev.201xxxxx

Search Terms: JSDoc Map generics assignment any unsafe

Code

class MyServer {
  constructor () {
    // new Map is Map<any, any>; cannot call Map constructor with new Map<string, string[]>
    /** @type {Map<string, string[]>} */
    this.functions = new Map()
  }
}

const myServer = new MyServer()
myServer.functions.get('foo')

Expected behavior:

Expected to be able to say what the Map contains when creating a new map. In typescript you can do new Map<string, string[]>() but theres no explicit generic parameter function invocation syntax for JSDoc

Actual behavior:

The type Map<any, any> exists. This fails the eslint rule of no-unsafe-assignment and this fails the no-any rule of tslint etc.

Note that doing something similar for arrays works because there's a special case inference for [] and it also works for Set because the constructor is defined differently and it has generic inference in the initialization statement.

Playground Link: https://www.typescriptlang.org/play?useJavaScript=true#code/MYGwhgzhAECyCeBlApgJwG5ugbwFDWmAHsA7CAF1QFdhyjVoAKASh3wOgHoAqb6AAXLwADshywwwgDwVUASxIBzADTRZCxQG0AugD4AvtG6d2BcgAs5EAHQAzKiVpzSMALzQSyAO5xJLdvq4gbjEZOTQALZIaJgM7p4+CCgYaP5RybF2Dk4u1orI5IwA5LZEREXMuCHgUHDRKQx4BKGyNHQMLGwcXLwCQqI4AIKoqGDwMpQaBkYm3RZWWY7kzmTQ7joBQVUt4ekxWPHedRmplXsNizlkeQXFpeXMQA

Related Issues: Yes, in eslint typescript-eslint/typescript-eslint#2109

Metadata

Metadata

Assignees

No one assigned

    Labels

    In DiscussionNot yet reached consensusSuggestionAn idea for TypeScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions