Menu
CoddyTech

Tipos de Interseção

Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 36 de 80.

As uniões dizem que um valor é de um tipo ou de outro. Tipos de interseção apontam na direção oposta: o e comercial & combina formatos de tabelas em um tipo que tem todos os campos de cada parte:

type HasName = { name: string }
type HasAge = { age: number }

type Person = HasName & HasAge

-- um Person deve ter AMBOS os campos
local user: Person = {
    name = "Alice",
    age = 25,
}

Deixe de fora age e o verificador reclama: uma interseção é um "e", nunca uma escolha entre opções. Isso permite criar formatos grandes a partir de partes pequenas e reutilizáveis: defina tipos específicos para preocupações separadas e depois combine-os conforme necessário:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Uma observação importante sobre Luau: faça a interseção de formatos de tabelas (e tipos de função), não de tipos primitivos. Algo como number & string não faz sentido, pois nenhum valor pode ser ambos ao mesmo tempo. Quando você quiser "este formato mais aquele formato", & é a ferramenta certa.

Em tempo de execução, é claro, um Person é apenas uma tabela Lua comum: a interseção existe somente para o verificador.

challenge icon

Desafio

Fácil

Combine duas formas pequenas em uma só.

  1. Escreva type HasName = {name: string}, type HasAge = {age: number} e type Person = HasName & HasAge.
  2. Crie local user: Person = {name = "Omar", age = 31}.
  3. Imprima `Name: {user.name}, Age: {user.age}`.

Pressione Executar código: a saída mostra Name: Omar, Age: 31.

Experimente você mesmo

-- 1) type HasName, type HasAge, type Person = HasName & HasAge
-- 2) local user: Person = {...}
-- 3) imprima a linha com o nome e a idade

Todas as lições de Introdução ao Luau

Pratique por conta própria: Compilador de Luau online