Menu
CoddyTech

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

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

Связанные типы часто имеют общие поля. Каждый 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

Задание

Легко

Расширьте тип сотрудника до типа менеджера.

  1. Напишите type Employee = {name: string, department: string} и type Manager = Employee & {teamSize: number}.
  2. Создайте local teamLead: Manager = {name = "Alice Johnson", department = "Engineering", teamSize = 8}.
  3. Выведите `{teamLead.name} manages {teamLead.teamSize} people`, затем teamLead.department.

Нажмите «Запустить код»: в выводе отображаются Alice Johnson manages 8 people и Engineering.

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

-- 1) объявите type Employee, затем type Manager = Employee & {...}
-- 2) объявите local teamLead: Manager = {...}
-- 3) выведите строку с краткой информацией, затем отдел

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

Потренируйтесь самостоятельно: Онлайн-компилятор Luau