Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

Estenda a estrutura de um funcionário para criar a estrutura de um gerente.

  1. Escreva type Employee = {name: string, department: string} e type Manager = Employee & {teamSize: number}.
  2. Crie local teamLead: Manager = {name = "Alice Johnson", department = "Engineering", teamSize = 8}.
  3. 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

Pratique por conta própria: Compilador de Luau online