microsoft / microsoft/TypeScript

Class generics not evaluated properly in JSDoc

Aperta
#56,671 1 commento 2 reazioni 1 assegnatario Vedi su GitHub

@sandersn ci sta già lavorando.

Dal 5/12/2023.

Needs Investigation
Lingua principale
Go
Stelle
111k
Fork
14.4k
Merge medio
1g 19h
PR unite (30g)
117

Descrizione

🔎 Search Terms

jsdoc generics

🕗 Version & Regression Information

This is the behavior in every version I tried (i.e. at random from 3.6.3 to nightly), and I reviewed the FAQ for entries about jsdoc and generics

⏯ Playground Link

https://www.typescriptlang.org/play?ts=5.4.0-dev.20231205&filetype=js#code/PQKhAIAEBcFMFsAOAbAhncAVcJgCgBjNAZ2PABEB7ecAbz3EfFAhgE9FY6B5AIwCtYBaAB5i0AE4BLAHYBzADRYAfAF8c+JuBmUAJrGIAhNgEld4ALx1VAbgZM5saAGEAFlOS6JsGQAoAlHTe0ACuEjLg0O7EAHQ6+kamuqp4KXgsUNAcXLRU8CIyIfC8sBJqGoSUMuLaelxWMrAA7hTUAXYEVTUE7p7eEQ11MY4uvV4+7UA

💻 Code
(not working): TypeScript in JSDoc (playground link)
/** @template T */
class Dom {
    /** @type {Object<string, T>} */
    nodesById = {};
    getChildren() {return this.nodesById}
}

/** @type {Dom<number>} */
const node = new Dom();
const children = node.getChildren(); // type is {[id: string]: T}
(working): TypeScript (playground link)
class Dom<T> {
    nodesById: {[id: string]: T} = {};
    getChildren() {return this.nodesById}
}

const node = new Dom<number>();
const children = node.getChildren(); // type is {[id: string]: number}
🙁 Actual behavior

With TypeScript in JSDoc, children has the type {[id: string]: T}, i.e. T is not resolved, although node has the type Dom<number>.

🙂 Expected behavior

With TypeScript, children has the type {[id: string]: number}, i.e. T is taken correctly from Dom<number>. The same is expected for TypeScript in JSDoc.

Additional information about the issue

Obviously, this is just a minimal working example. We have a large legacy codebase where we introduce TypeScript gradually via JSDoc comments (a nuke-everything TypeScript rewrite would not be feasible).

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.