Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Crie estes aliases de tipo:

  • Employee: id (number), name (string), department (string)
  • Manager: Employee estendido (via &) com teamSize (number)
  • Contact: email (string)
  • Developer: a interseção de Employee, Contact e {yearsExperience: number}

Crie:

  • teamLead do tipo Manager: id 101, nome "Alice Johnson", departamento "Engineering", teamSize 8
  • dev do tipo Developer: id 102, nome "Bob Smith", departamento "Engineering", e-mail "bob@company.com", yearsExperience 5

Crie uma função getManagerSummary que recebe um Manager e retorna [name] manages [teamSize] people.

Imprima, cada um em sua própria linha:

  1. o resultado de getManagerSummary(teamLead)
  2. [name] has [yearsExperience] years of experience para dev
  3. o departamento de teamLead
  4. 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
quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Compilador de Lua online