Microsoft/TypeScript

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

Open

#63090 opened on Feb 4, 2026

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

Description

🔎 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

Contributor guide