Microsoft/TypeScript

Incorrect type inference for generic class in JavaScript

Open

#61,552 建立於 2025年4月5日

在 GitHub 查看
 (0 留言) (0 反應) (0 負責人)TypeScript (6,726 fork)batch import
BugDomain: check: Type InferenceHelp Wanted

倉庫指標

Star
 (48,455 star)
PR 合併指標
 (平均合併 6天 17小時) (30 天內合併 9 個 PR)

描述

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[]} */ ([])); }

貢獻者指南