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
- 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.
- 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.
