Saltar al contenido

    ↑↓ mover · ⏎ abrir · esc cerrar

    TS2367

    Comparación sin solapamiento

    This comparison appears to be unintentional because the types 'string' and 'number' have no overlap.

    Las palabras del propio compilador. Sin traducir — es la cadena que pegaste en el buscador.

    Los dos lados nunca pueden ser iguales, así que la comparación siempre es falsa y el compilador asume que no querías escribirla.

    Reproducción

    declare const a: string
    
    if (a === 1) {
    }

    La compilación afirma que esto emite exactamente este código.

    Por qué lo dice el compilador

    Es uno de los pocos diagnósticos sobre intención y no sobre seguridad — la comparación se ejecutaría perfectamente y devolvería `false` para siempre. Resulta más útil tras una refactorización, cuando una variable que era una unión se ha acotado y una rama que antes importaba se ha vuelto código muerto en silencio. Tómalo como un aviso de que algo cambió más arriba.

    Arreglos

    1. 01
      declare const a: string
      
      if (a === '1') {
      }

      Compara con el tipo que realmente tienes.

    2. 02
      declare const a: string | number
      
      if (a === 1) {
      }

      O amplía la variable, si de verdad puede ser cualquiera de los dos. Entonces la comparación vuelve a tener propósito y acota `a` a `number` dentro del bloque.

    Conclusión

    Una comparación que el compilador llama inútil suele ser una rama que antes era alcanzable. Bórrala o arregla el tipo que protegía — no hagas un cast para conservarla.

    Adónde ir después

    Errores