Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Crea 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: Person con nombre "Alice" y edad 25
  • worker: Employee con nombre "Bob", edad 30, 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)
quiz iconPonte a prueba

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