microsoft / microsoft/TypeScript

OOME/Excessively deep type on upgrade from 4.9.4 to 5.x, introduced in 5.0.0-dev.20230203

Abierto
#54,517 9 comentarios 6 reacciones 1 asignado Ver en GitHub

@jakebailey ya está trabajando en esto.

Desde el 20/6/2023.

Needs Investigation
Lenguaje dominante
Go
Estrellas
111k
Forks
14.4k
Merge medio
1 d 19 h
PR fusionados (30 d)
117

Descripción

Bug Report

🔎 Search Terms

tsc 5.x Out of Memory Heap

🕗 Version & Regression Information
  • This is a crash
  • This changed between versions 5.0.0-dev.20230202 and 5.0.0-dev.20230203
⏯ Playground Link

Unavailable, as I'm trying to compile an internal codebase, but I can provide access to our github repo if possible.

💻 Code

The "Type is excessively deep" is being triggered in code that calls this function:

export type LoadedCollaboration = Loaded<Collaboration, "parent">;
export async function getCollaborationMetadata(c: LoadedCollaboration): Promise<CollaborationMetadata> {
  ...
}

Where Loaded is a mapped type (which is available in our open source project):

https://github.com/stephenh/joist-ts/blob/main/packages/orm/src/loadHints.ts#L168

And the Collaboration "parent" key (from our internal project) is a union type with ~20 different types in it:

export type CollaborationParent =
  | ScheduleSubPhase
  | Approval
  ...15 others...
  | ToDo
  | SchedulePhase;
🙁 Actual behavior

In TS 4.9.4, our codebase compiled fine, in about 50 seconds.

I tried upgrading to TS 5.1.3, and the compile now OOMEs, and if given enough RAM, eventually after ~10-15 minutes, fails with a "Type instantiation is excessively deep and possibly infinite" error.

By using the 5.0.0 nightlies published to npm, I was able to bisect that version 5.0.0-dev.20230203 is what introducing the issue, and caused our compile times to jump from ~50 seconds -> 10+ minutes & fail with the type error.

🙂 Expected behavior

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.