Microsoft/TypeScript

Crash: RangeError: Maximum call stack size exceeded during type serialization of recursive distributive mapped types

Open

#63,090 创建于 2026年2月4日

在 GitHub 查看
 (1 评论) (0 反应) (0 负责人)TypeScript (48,455 star) (6,726 fork)batch import
BugDomain: check: Type CircularityHelp Wanted

描述

🔎 Search Terms

"Maximum call stack size exceeded"

"createTypeNodesFromResolvedType stack overflow"

"visitAndTransformType crash"

"recursive mapped type keyof distribution"

🕗 Version & Regression Information

Crashes in 5.7.3, 5.8.3, 5.9.3, Nightly,TS7.

⏯ Playground Link

https://www.typescriptlang.org/zh/play/?target=7&ts=6.0.0-dev.20260203#code/C4TwDgpgBAcgPAFQDRQNJQgD2BAdgEwGcpDgAnAS1wHMA+KAXgSgB8oBvAKCh6gG0AClCpoAugC5YcANYQQAewBmUZGlqcAvn1SiA3J1CQoAWUZTcAVwC2AIwhkUAImOPauoA

💻 Code

type N<T, K extends string> =T | {
    [P in K]: N<keyof T, K>
}[K];
type M = N<number, "M">;

🙁 Actual behavior


.\ts-versions\nightly\node_modules\.bin\tsc.cmd   recursivelyExpandingUnionNoStackoverflow_mutated_batch0.ts
D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:123214
      throw e;
      ^
RangeError: Maximum call stack size exceeded
    at instantiateTypeWorker (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:63601:33)                                                                                           
    at instantiateTypeWithAlias (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:63592:20)                                                                                        
    at instantiateType (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:63560:29)                                                                                                 
    at getTypeOfMappedSymbol (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:58471:24)                                                                                           
    at getTypeOfSymbol (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:56838:14)                                                                                                 
    at getNonMissingTypeOfSymbol (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:56861:30)                                                                                       
    at addPropertyToElementList (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:52128:97)                                                                                        
    at createTypeNodesFromResolvedType (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:52090:11)                                                                                 
    at createTypeNodeFromObjectType (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:51815:25)                                                                                    
    at visitAndTransformType (D:\do\typeFuzz\ts-versions\nightly\node_modules\typescript\lib\_tsc.js:51738:24)                                                                                           

Node.js v22.19.0

🙂 Expected behavior

The compiler should not crash.

Additional information about the issue

No response

贡献者指南