Estendendo Formatos
Parte da seção Introdução ao Luau do Journey de Lua da Coddy. Lição 43 de 80.
Formas relacionadas costumam compartilhar campos. Todo Admin também é um User; copiar os campos compartilhados para as duas declarações pode fazer com que elas se afastem uma da outra.
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 exige: name, age E level
local root: Admin = {name = "Root", age = 35, level = 9}Enquanto o TypeScript precisa de uma palavra-chave separada extends para interfaces, Luau não precisa de nada novo: as interseções já fazem esse 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 forma ou a outra, enquanto uma interseção A & B precisa satisfazer ambas ao mesmo tempo. E, como Admin tem todos os campos de User, um valor Admin pode ser passado em qualquer lugar onde se espera um User.
Desafio
FácilEstenda a estrutura de um funcionário para criar a estrutura de um gerente.
- Escreva
type Employee = {name: string, department: string}etype Manager = Employee & {teamSize: number}. - Crie
local teamLead: Manager = {name = "Alice Johnson", department = "Engineering", teamSize = 8}. - Imprima
`{teamLead.name} manages {teamLead.teamSize} people`e, em seguida,teamLead.department.
Pressione Executar código: a saída mostra Alice Johnson manages 8 people e Engineering.
Experimente você mesmo
-- 1) type Employee, depois type Manager = Employee & {...}
-- 2) local teamLead: Manager = {...}
-- 3) print a linha de resumo, depois o departamento
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