Tagged union
Un tipo unión con un campo "etiqueta" explícito que indica qué variante es. El union de C/C++ no está etiquetado (comparte memoria en crudo, propenso a errores en tiempo de ejecución); un tagged union lleva información de tipo que el compilador puede validar.
En TypeScript se llama union discriminada: type Result = { kind: 'ok'; value: number } | { kind: 'err'; error: string }. El compilador estrecha el tipo mediante un switch sobre kind. El enum de Rust es formalmente un tagged union — cada variante tiene un discriminante implícito. En C++: std::variant + std::visit. Uso clásico: tipos de respuesta de API, máquinas de estados, nodos de AST de un parser. Los sistemas de tipos modernos hacen que los tagged unions sean seguros; la sintaxis heredada de union en C es peligrosa (puede leer el campo equivocado, comportamiento indefinido).