Menu
Coddy logo textTech

Tipos de Interseção

Parte da seção Introdução ao Luau do Journey de Lua da Coddy — lição 34 de 73.

Unions dizem que um valor é um tipo ou outro. Intersection types funcionam no sentido oposto: o e comercial & combina formatos de tabelas em um tipo que possui todos os fields 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 o age e o verificador vai reclamar — uma interseção é um "e", nunca uma escolha opcional. Isso permite construir grandes formatos a partir de peças pequenas e reutilizáveis: defina tipos focused para preocupações separadas, depois una-os together conforme necessário:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

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

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

challenge icon

Desafio

Fácil

Crie dois aliases de tipo: HasName com um campo name: string, e HasAge com um campo age: number.

Crie Person como a interseção HasName & HasAge.

Crie HasEmail com um campo email: string, e Employee como a interseção de todos os três: HasName & HasAge & HasEmail.

Declare:

  • user: Person com nome "Alice" e idade 25
  • worker: Employee com nome "Bob", idade 30, e email "bob@company.com"

Crie displayPerson(person: Person): string retornando "Name: [name], Age: [age]", e displayEmployee(employee: Employee): string retornando "Name: [name], Age: [age], Email: [email]".

Imprima displayPerson(user) e displayEmployee(worker) em linhas separadas.

Experimente você mesmo

-- Escreva o código aqui
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- declare user e worker, escreva as duas funções display,
-- imprima displayPerson(user) e displayEmployee(worker)
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

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