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 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.

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 las tres: HasName & HasAge & HasEmail.

Declara:

  • user: Person con el nombre "Alice" y la edad 25
  • worker: Employee con el nombre "Bob", la edad 30 y 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)
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

Practica por tu cuenta: Compilador de Lua online