TypeScriptLección 13 de 16
Uniones discriminadas
Una unión discriminada es un conjunto de tipos de objeto con un campo etiqueta común, como kind o status. Por la etiqueta, TypeScript sabe qué otros campos tiene el objeto.
Lo esencial
- La etiqueta es un campo literal distinto en cada miembro: kind: "circle".
- Un switch sobre la etiqueta estrecha el objeto en cada case.
- En default asigna el valor a una variable de tipo never: es la comprobación exhaustiva.
- Si añades un miembro nuevo y olvidas su case, el compilador muestra un error.
Ejemplo
type Shape = | { kind: "circle"; radius: number } | { kind: "square"; side: number }; function area(shape: Shape): number { switch (shape.kind) { case "circle": return Math.PI * shape.radius ** 2; // shape is the circle here case "square": return shape.side ** 2; // and the square here default: { // if a new kind is added to Shape and not handled, this line turns red const unreachable: never = shape; return unreachable; } }} console.log(area({ kind: "square", side: 3 }));console.log(area({ kind: "circle", radius: 1 }).toFixed(2));En case "circle" está disponible radius y en case "square", side. Si añades un triángulo a Shape, la línea con never se pone en rojo al instante.
Tarea
Cómo usar el editor⌘ Enter o Ctrl Enter ejecuta el código, ⇧ ⌘ Enter comprueba la tarea.Tab y Mayús Tab sangran la línea o la selección; Esc y luego Tab sale del editor.La comprobación compara lo que imprimió el programa con la tarea; los espacios al final de línea no cuentan.Tras dos comprobaciones fallidas puedes ver la solución. Tu código se guarda en este navegador.Añade a RequestState un miembro error con el campo message, trátalo en render, escribe un default con never y mete el estado de error en el array. La última línea de salida es «Error: Not found».
Salida
Aquí aparecerá lo que imprima el programa.