Menu
CoddyTech

Tipos de intersección

Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 36 de 80.

Las uniones indican que un valor es de un tipo o de otro. Los tipos de intersección apuntan en la dirección opuesta: el 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

-- un Person debe tener AMBOS campos
local user: Person = {
    name = "Alice",
    age = 25,
}

Omite age y el verificador se quejará: una intersección es un «y», nunca una elección entre opciones. Esto te permite crear formas grandes a partir de piezas pequeñas y reutilizables: define tipos específicos para aspectos separados y después únelos según sea necesario:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Una nota 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 quieras «esta forma más aquella forma», & es la herramienta adecuada.

En tiempo de ejecución, por supuesto, un Person es simplemente una tabla Lua normal: la intersección solo existe para el verificador.

challenge icon

Desafío

Fácil

Combina dos formas pequeñas en una.

  1. Escribe type HasName = {name: string}, type HasAge = {age: number} y type Person = HasName & HasAge.
  2. Crea local user: Person = {name = "Omar", age = 31}.
  3. Imprime `Name: {user.name}, Age: {user.age}`.

Presiona Ejecutar código: el resultado muestra Name: Omar, Age: 31.

Pruébalo tú mismo

-- 1) type HasName, type HasAge, type Person = HasName & HasAge
-- 2) local user: Person = {...}
-- 3) imprime la línea con el nombre y la edad

Todas las lecciones de Introducción a Luau

Practica por tu cuenta: Compilador de Luau online