Estendendo Formatos
Parte da seção Introdução ao Luau do Journey de Lua da Coddy — lição 41 de 73.
Formatos relacionados frequentemente compartilham campos. Todo Admin também é um User; copiar os campos compartilhados para ambas as declarações facilita que eles divirjam.
Você conheceu o operador de interseção & ao combinar aliases — ele funciona exatamente da mesma forma para formatos. A & B significa "tem tudo de A e tudo de B":
type User = {name: string, age: number}
type Admin = User & {level: number}
-- Admin agora requer: name, age E level
local root: Admin = {name = "Root", age = 35, level = 9}Onde o TypeScript precisa de uma palavra-chave extends separada para interfaces, o Luau não precisa de nada novo — interseções já fazem o trabalho. Você pode encadear várias partes:
type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}Não confunda & com |: uma união A | B é qualquer um dos formatos, enquanto uma interseção A & B deve satisfazer ambos ao mesmo tempo. E como Admin possui todos os campos de User, um valor Admin pode ser passado em qualquer lugar onde um User é esperado.
Desafio
FácilCrie estes aliases de tipo:
Employee—id(number),name(string),department(string)Manager—Employeeestendido (via&) comteamSize(number)Contact—email(string)Developer— a intersecção deEmployee,Contacte{yearsExperience: number}
Crie:
teamLeaddo tipoManager— id101, name"Alice Johnson", department"Engineering", teamSize8devdo tipoDeveloper— id102, name"Bob Smith", department"Engineering", email"bob@company.com", yearsExperience5
Crie uma função getManagerSummary que recebe um Manager e retorna [name] manages [teamSize] people.
Imprima, cada um em sua própria linha:
- o resultado de
getManagerSummary(teamLead) [name] has [yearsExperience] years of experienceparadev- o department de
teamLead - o email de
dev
Experimente você mesmo
-- Escreva o código aqui
-- 1) defina Employee, depois Manager / Contact / Developer com &
-- 2) crie teamLead e dev
-- 3) escreva getManagerSummary
-- 4) imprima as quatro linhas solicitadas
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
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
Tipando Parâmetros e Valores de RetornoTipando Funções AnônimasFunções que Não Retornam NadaParâmetros OpcionaisValores Padrão para ParâmetrosFunções VariádicasDefinindo Tipos de FunçõesRecapitulação: Funções Tipadas2Tipos Fundamentais
Tipos Básicos: num, str, boolO Tipo 'any': Escape HatchO Tipo 'unknown'Tipos Nil e OpcionaisInferência de Tipos na PráticaAnotações Explícitas de TiposReciclagem: Prática de Tipos Fundamentais5Aliases, 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 MapsIterando Sobre TabelasTabelas de Formato MistoArrays Tipados Multidimensionaistable.unpack e VarargsRecapitulando: Arrays e Maps