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.
Desafio
FácilCombine duas formas pequenas em uma só.
- Escreva
type HasName = {name: string},type HasAge = {age: number}etype Person = HasName & HasAge. - Crie
local user: Person = {name = "Omar", age = 31}. - 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
1Começando com o Luau
O que é Luau?Por que usar Luau?Seu primeiro código em LuauVerificação de tipos e modos de erroRecapitulando: Introdução ao Luau4Trabalhando com funções
Tipagem de parâmetros e valores de retornoTipagem de funções anônimasFunções sem retornoParâmetros opcionaisValores padrão dos parâmetrosValores padrão para booleanosFunções variádicasDefinindo tipos de funçãoRecapitulação: funções tipadas2Tipos básicos
Número, string e booleanoO tipo 'any': válvula de escapeO tipo 'unknown'Tipos nulos e opcionaisInferência de tipos na práticaAnotações explícitas de tipoRevisão: prática com tipos básicos5Aliases, Uniões, Interseções
Aliases de Tipos para PrimitivosTipos de UniãoTrabalhando com Tipos de UniãoTipos LiteraisTipos de InterseçãoCombinando Aliases de TiposRecapitulando: Combinações Avançadas de Tipos3Tabelas Tipadas: Arrays e Maps
Arrays TipadosAdicionando e Lendo ElementosO que é um Tipo Map?Declarando e Acessando MapsPercorrendo TabelasTabelas com Formatos MistosLendo uma GradeConstruindo uma Gradetable.unpackRevisão: Arrays e MapsPratique por conta própria: Compilador de Luau online