microsoft / microsoft/TypeScript

Misleading error message "'{}' and 'number' have no overlap"

Abierto
#60,583 2 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

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

Descripción

🔎 Search Terms

empty object type, unintentional comparison

🕗 Version & Regression Information
⏯ Playground Link

https://www.typescriptlang.org/play/?noUncheckedIndexedAccess=true&target=99&ts=5.8.0-dev.20241124#code/JYMwBAFA3gvmC8iwAYCUZZA

💻 Code
if ({} === 0) {}
🙁 Actual behavior

TS 2367: "This comparison appears to be unintentional because the types '{}' and 'number' have no overlap."

🙂 Expected behavior

TS 2367: "This comparison appears to be unintentional because the types 'object' and 'number' have no overlap."

Additional information about the issue

the type {} and number do have overlap; number is a subset of {}.

declare const n: number;
// allowed!
const emptyObjectType: {} = n;

TS is correct to report an error, but it should give a technically correct reason for the error.

Analogous (very contrived) examples can be made for similar coincidentally-including-primitive types, like

// This comparison appears to be unintentional because the types '{ toFixed(): string; toPrecision(): string; }' and 'number' have no overlap.
if ({ toFixed(): string { return "" }; toPrecision(): string { return "" }} === 0) {}

// yet this is allowed
const numbery: { toFixed(): string; toPrecision(): string; } = 0;

Stems from discord discussion beginning here: https://discord.com/channels/508357248330760243/508357638677856287/1310419206260654081

Closely related to discussion regarding https://github.com/microsoft/TypeScript/issues/60582

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.

Línea de trabajo

Comienza ejecutando la reproducción enlazada en TypeScript Playground y siguiendo el diagnóstico TS2367. Compara la redacción reportada '{}' y 'number' con la redacción esperada 'object' y 'number'; después, añade o actualiza la cobertura para la comparación mostrada y verifica que el diagnóstico siga siendo correcto para los ejemplos relacionados.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.