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 un tipo u otro. Los tipos intersección apuntan en la dirección opuesta: el símbolo 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,
}Si omites age, el verificador se quejará; una intersección es un "y", nunca una elección libre. 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 nota importante sobre Luau: interseca formas de tablas (y tipos de funciones), no primitivos. Algo como number & string no tiene sentido, ya que ningún valor puede ser ambos a la vez. Cuando quieras "esta forma más esa forma", & es tu herramienta.
En tiempo de ejecución, por supuesto, un Person es solo una tabla normal de Lua: la intersección existe únicamente para el verificador.
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 los tres: HasName & HasAge & HasEmail.
Declara:
user: Personcon nombre"Alice"y edad25worker: Employeecon nombre"Bob", edad30, y 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 Maps