Microsoft/TypeScript

Incorrect type inference for generic class in JavaScript

Open

#61,552 opened on Apr 5, 2025

View on GitHub
 (0 comments) (0 reactions) (0 assignees)TypeScript (48,455 stars) (6,726 forks)batch import
BugDomain: check: Type InferenceHelp Wanted

Description

Does this issue occur when all extensions are disabled?: Yes

  • VS Code Version: 1.99.0
  • OS Version: Windows 10 Home 22H2

Steps to Reproduce:

  1. Define a generic class as below:
    /** @template T */
    class C {
      /** @param {T} a */
      constructor(a) { }
      f() { const v = new C(/** @type {T[]} */ ([])); }
    }
    
  2. The type of the variable v is incorrectly inferred to be C<T[][]>.

If the constructor call is outside of the class C<T> (as in the example below), the return type of the call is correctly inferred to be C<T[]>.

/** @template T */
class D {
  f() { const v = new C(/** @type {T[]} */ ([])); }
}
/** @template T; @param {C<T>} c */
const f = c => { const v = new C(/** @type {T[]} */ ([])); }

Contributor guide