Estendendo Formatos
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 41 de 73.
Formas relacionadas geralmente compartilham campos. Todo Admin também é um User; copiar os campos compartilhados para ambas as declarações faz com que elas se afastem.
Você conheceu o operador de interseção & ao combinar aliases. Ele funciona exatamente da mesma forma para formas. 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}Enquanto TypeScript precisa de uma palavra-chave extends separada para interfaces, Luau não precisa de nada novo: as 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 é uma ou outra forma, enquanto uma interseção A & B deve satisfazer ambas ao mesmo tempo. E, como Admin tem todos os campos de User, um valor Admin pode ser passado em qualquer lugar onde um User seja 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 interseção deEmployee,Contacte{yearsExperience: number}
Crie:
teamLeaddo tipoManager: id101, nome"Alice Johnson", departamento"Engineering", teamSize8devdo tipoDeveloper: id102, nome"Bob Smith", departamento"Engineering", e-mail"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 departamento de
teamLead - o e-mail 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 MapsPratique por conta própria: Compilador de Lua online