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.

Evaluación

Este issue todavía no se ha evaluado.

Descripción

Needs Investigation

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
Lenguaje dominante
Go
Estrellas
111k
Forks
14.4k
Merge medio
1 d 19 h
PR fusionados (30 d)
117

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.

Más de microsoft/TypeScript

Todos los issues de microsoft/TypeScript

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.