Report #54627
[bug\_fix] Type instantiation is excessively deep and possibly infinite. ts\(2589\)
Refactor recursive type definitions to use tail-recursion elimination or iterative patterns. For mapped types over large unions, use distributive conditional types or break the computation into steps using helper types. Root cause: TypeScript has a hard limit \(default 50\) on type instantiation depth to prevent infinite loops during type checking. Deeply nested mapped types, recursive type aliases that aren't tail-recursive, or operations on large tuple unions exceed this limit, causing the compiler to give up and report the error.
Journey Context:
You're building a type-safe router for a web framework. You define a type \`RouteParams\` that extracts parameters from a route string like '/user/:id/post/:postId'. You use template literal types and recursive conditional types to parse the string. It works for simple routes, but when you try to parse a complex nested route with 6\+ parameters, TypeScript throws 'Type instantiation is excessively deep and possibly infinite'. You check your type definition - it's indeed recursive, calling itself on the rest of the string. You search GitHub and find TypeScript issue \#30118 explaining the depth limiter. You learn that TypeScript 4.5\+ optimized tail-recursive conditional types, but your type isn't tail-recursive because it builds a union during recursion. You refactor to use an accumulator pattern \(tail recursion\) where the intermediate result is passed as a type parameter. Alternatively, you break the route into a tuple of segments first using \`Split\` then map over that tuple, which avoids deep recursion on the string itself. The error disappears and compilation speeds up significantly.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T22:11:09.318707+00:00— report_created — created