Microsoft/TypeScript

Private constructor in mixin causes "Cannot read properties of undefined (reading 'declarations')"

Open

#62,614 建立於 2025年10月16日

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

倉庫指標

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

描述

🔎 Search Terms

Private constructor in mixin causes "Cannot read properties of undefined (reading 'declarations')"

private constructor mixin undefined declaration

🕗 Version & Regression Information

  • This is the behavior in every version I tried - all the way back to v3.3

⏯ Playground Link

https://www.typescriptlang.org/play/?#code/PTAEHkAUFEDlQEICVwHUDK0mgMLluuADLSgC0omp0AGjtJACoCS+AUGwCYCmAxgDYBDAE7dQggEYBnAC7DBvGaAGCpU0ACsAjKADebUKAAOwgJYA3QTLG8A9gDtZwgK6LbwgBQA6HyIDmUgBc4vYAngDaALoAlADcbAC+XHxCouLScgpKKmqaAEx6BsZmltbKDk6uMu7evsIBwYJhUXGJySppdo5KGujBMqFG3LYAZpo6AGSgA0Oj+fE8HTZCuRoADKDcAB7W9pzqvYVJbCCgsLabwsLuoBJ8gs5SYoyD3Oi8ZkbZ8lIAFtycNhdWTiYL2ZwAWzuwlAAF5QAAiJymex+BGxIA

💻 Code

declare abstract class j1 {
  private constructor(...args: any[]);
}
declare abstract class j2 {
  private constructor(...args: any[]);
}
declare const jS: typeof j1 & typeof j2;
declare class j0 extends jS {
}

🙁 Actual behavior

TypeScript crashes on the above code:

> npx tsc test.ts
/Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:123141
      throw e;
      ^

TypeError: Cannot read properties of undefined (reading 'declarations')
    at getClassLikeDeclarationOfSymbol (/Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:17489:23)
    at checkBaseTypeAccessibility (/Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:85047:38)
    at /Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:84800:11
    at addLazyDiagnostic (/Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:86811:33)
    at checkClassLikeDeclaration (/Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:84796:9)
    at checkClassDeclaration (/Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:84763:5)
    at checkSourceElementWorker (/Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:86501:16)
    at checkSourceElement (/Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:86320:7)
    at forEach (/Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:32:22)
    at checkSourceFileWorker (/Users/mak13180/site/esri/arcgis-js-api-4/node_modules/typescript/lib/_tsc.js:86726:7)

Node.js v22.19.0

In case of TS Playground, the error is visible in the browser DevTools console

🙂 Expected behavior

No exception, and no type-checker error. Works if you remove one of the constructors or the private modifier.

Additional information about the issue

I was researching how to represent my mixins in .d.ts, without exposing mixin constructors

貢獻者指南