Tipos de intersección
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 34 de 73.
Las uniones indican que un valor es de un tipo o de otro. Los tipos de intersección apuntan en la otra dirección: el signo ampersand & combina formas de tablas en un tipo que tiene todos los campos de cada parte:
type HasName = { name: string }
type HasAge = { age: number }
type Person = HasName & HasAge
-- una Person debe tener AMBOS campos
local user: Person = {
name = "Alice",
age = 25,
}Omite age y el comprobador se quejará: una intersección es un «y», nunca una elección entre opciones. Esto te permite construir formas grandes a partir de piezas pequeñas y reutilizables: define tipos específicos para responsabilidades separadas y después combínalos según sea necesario:
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
Una observación importante sobre Luau: intersecta formas de tablas (y tipos de función), no tipos primitivos. Algo como number & string no tiene sentido, ya que ningún valor puede ser ambas cosas a la vez. Cuando quieres «esta forma más esa forma», & es tu herramienta.
En tiempo de ejecución, por supuesto, un Person es simplemente una tabla normal de Lua: la intersección existe únicamente para el comprobador.
Desafío
FácilCrea dos alias de forma: HasName con un campo name: string, y HasAge con un campo age: number.
Crea Person como la intersección HasName & HasAge.
Crea HasEmail con un campo email: string, y Employee como la intersección de las tres: HasName & HasAge & HasEmail.
Declara:
user: Personcon el nombre"Alice"y la edad25worker: Employeecon el nombre"Bob", la edad30y el correo electrónico"bob@company.com"
Crea displayPerson(person: Person): string que devuelva "Name: [name], Age: [age]", y displayEmployee(employee: Employee): string que devuelva "Name: [name], Age: [age], Email: [email]".
Imprime displayPerson(user) y displayEmployee(worker) en líneas separadas.
Pruébalo tú mismo
-- Escribe código aquí
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- declara user y worker, escribe las dos funciones display,
-- imprime displayPerson(user) y displayEmployee(worker)
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Introducción a Luau
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y MapsPractica por tu cuenta: Compilador de Lua online