microsoft / microsoft/TypeScript
Certain recursive types cause "Maximum call stack size exceeded" error in TS server
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 132
Descripción
🔎 Search Terms
visitType, visitObjectType, visitSymbol, RangeError, TypeScript Server Error
🕗 Version & Regression Information
- This is the behavior in versions 5.9.2 and 6.0.0-dev.20250909
⏯ Playground Link
No response
💻 Code
I'm not sure how to reproduce this at low level. I met this error in VS Code when it stopped showing "Extract" and "Move" groups in the "Refactor..." menu. Then I looked in the extension logs and saw an error in TS Server.
Steps to reproduce are:
- In an empty TypeScript project (tsconfig.json may be nonexistent), create a .ts file with:
function func<T, D>(param: ProblematicType<T, D>) {} type ProblematicType<T, D> = { prop: ProblematicType<T[keyof T], any>; }; class TestRefactoring<T> { createElement() { document.createElement('span'); } } - Select
document.createElement('span'); - Make a right click on the selection
- Click "Refactor..."
🙁 Actual behavior
- "Refactor..." menu:
- Extension Host logs in VS Code:
[error] [vscode.typescript-language-features] provider FAILED [error] Error: <semantic> TypeScript Server Error (6.0.0-dev.20250909) Maximum call stack size exceeded RangeError: Maximum call stack size exceeded at instantiateType (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:68177:27) at instantiateTypeWorker (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:68263:9) at instantiateTypeWithAlias (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:68210:20) at instantiateType (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:68178:29) at getMappedType (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:67858:67) at <redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:67987:56 at map (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:2492:19) at getObjectTypeInstantiation (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:67987:29) at instantiateTypeWorker (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:68235:16) at instantiateTypeWithAlias (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:68210:20) at instantiateType (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:68178:29) at getTypeOfInstantiatedSymbol (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:61397:40) at getTypeOfSymbol (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:61461:14) at visitSymbol (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:49811:17) at visitObjectType (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:49796:9) at visitType (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:49725:11) [...] at visitSymbol (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:49812:7) at visitObjectType (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:49796:9) at visitType (<redacted>\.vscode\extensions\ms-vscode.vscode-typescript-next-6.0.20250909\node_modules\typescript\lib\typescript.js:49725:11) at n.create (<redacted>\AppData\Local\Programs\Microsoft VS Code\resources\app\extensions\typescript-language-features\dist\extension.js:2:357355) at y.dispatchResponse (<redacted>\AppData\Local\Programs\Microsoft VS Code\resources\app\extensions\typescript-language-features\dist\extension.js:2:30813) at y.dispatchMessage (<redacted>\AppData\Local\Programs\Microsoft VS Code\resources\app\extensions\typescript-language-features\dist\extension.js:2:29254) at ChildProcess.<anonymous> (<redacted>\AppData\Local\Programs\Microsoft VS Code\resources\app\extensions\typescript-language-features\dist\extension.js:2:28539) at ChildProcess.emit (node:events:518:28) at ChildProcess.emit (node:domain:489:12) at emit (node:internal/child_process:949:14) at processTicksAndRejections (node:internal/process/task_queues:91:21)
🙂 Expected behavior
- "Refactor..." menu:
- No error.
Additional information about the issue
The type ProblematicType might not make sense to you, but it's a simplified (made as simple as I was able to) example of a real type in the @types/oojs library where I posted the issue as well, see https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/73718.
For some reason, in VS Code this error appears only when the class is generic and an out of scope entity is referenced in the selection:
- If you remove the generic parameter from
TestRefactoring, the error will be gone. - If you remove the
documentreference fromcreateElement()and replace it withsmth, the error will be gone.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Empieza con la reproducción mínima en TypeScript y la solicitud de refactorización de TS Server descritas en el issue. Usa el stack reportado alrededor de instantiateType, getMappedType, visitSymbol, visitObjectType y visitType para seguir el recorrido recursivo. La tarea está terminada cuando el ejemplo ya no provoca un RangeError y el menú Refactor esperado está disponible.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript
- Área
- tooling
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100