Menu
Coddy logo textTech

Расширение структур

Часть раздела Введение в Luau путешествия по Lua на Coddy — урок 41 из 73.

Связанные формы часто имеют общие поля. Каждый Admin также является User; копирование общих полей в оба объявления приведет к их расхождению.

Вы уже встречали оператор пересечения & при объединении псевдонимов — для форм он работает точно так же. A & B означает «содержит всё из A и всё из B»:

type User = {name: string, age: number}
type Admin = User & {level: number}

-- Admin теперь требует: name, age И level
local root: Admin = {name = "Root", age = 35, level = 9}

Там, где TypeScript требует отдельное ключевое слово extends для интерфейсов, Luau не нужно ничего нового — пересечения уже справляются с этой задачей. Вы можете объединять несколько частей в цепочку:

type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}

Не путайте & с |: объединение A | B — это любая из двух форм, тогда как пересечение A & B должно удовлетворять обеим одновременно. И поскольку Admin содержит все поля User, значение типа Admin можно передавать везде, где ожидается User.

challenge icon

Задание

Легко

Создайте следующие псевдонимы типов (type aliases):

  • Employeeid (number), name (string), department (string)
  • ManagerEmployee, расширенный (через &) с помощью teamSize (number)
  • Contactemail (string)
  • Developer — пересечение (intersection) Employee, Contact и {yearsExperience: number}

Создайте:

  • teamLead типа Manager — id 101, name "Alice Johnson", department "Engineering", teamSize 8
  • dev типа Developer — id 102, name "Bob Smith", department "Engineering", email "bob@company.com", yearsExperience 5

Создайте функцию getManagerSummary, которая принимает Manager и возвращает [name] manages [teamSize] people.

Выведите на экран, каждый с новой строки:

  1. результат getManagerSummary(teamLead)
  2. [name] has [yearsExperience] years of experience для dev
  3. department для teamLead
  4. email для dev

Попробуйте сами

-- Напишите код здесь
-- 1) определите Employee, затем Manager / Contact / Developer с &
-- 2) создайте teamLead и dev
-- 3) напишите getManagerSummary
-- 4) выведите четыре запрошенные строки
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Введение в Luau