Saltar al contenido
TS2312

    ↑↓ mover · ⏎ abrir · esc cerrar

    TS2312

    Una interfaz no puede extender una unión

    An interface can only extend an object type or intersection of object types with statically known members.

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

    Una interfaz intentó heredar de una unión cuyos miembros no se conocen todos a la vez.

    Reproducción

    type Choice = { a: 1 } | { b: 2 }
    
    interface Both extends Choice {
      c: 3
    }

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

    Por qué lo dice el compilador

    La herencia de interfaz fusiona un conjunto definido de miembros. Una unión significa una rama u otra, así que no existe una lista única que la interfaz pueda heredar y fusionar.

    Arreglos

    1. 01
      type Choice = { a: 1 } | { b: 2 }
      
      type WithC = Choice & { c: 3 }

      Usa un alias de intersección para añadir miembros a cada rama de la unión.

    2. 02
      interface Base {
        a: number
      }
      
      interface Extended extends Base {
        c: number
      }

      Extiende una interfaz o tipo de objeto cuando la base tenga una forma fija.

    Conclusión

    Las interfaces extienden formas de objeto conocidas. Usa alias de tipo para componer uniones e intersecciones.

    Adónde ir después

    Errores