Типы пересечения (Intersection)
Часть раздела Введение в Luau путешествия по Lua на Coddy. Урок 36 из 80.
Объединения означают, что значение имеет один тип или другой. Пересечения типов работают наоборот: амперсанд & объединяет формы таблиц в тип, содержащий все поля каждой части:
type HasName = { name: string }
type HasAge = { age: number }
type Person = HasName & HasAge
-- У Person обязательно должны быть ОБА поля
local user: Person = {
name = "Alice",
age = 25,
}Пропусти age, и проверяющий выдаст ошибку: пересечение — это «и», а не выбор одного из вариантов. Это позволяет создавать большие формы из небольших повторно используемых частей: определяй отдельные типы для разных задач, а затем объединяй их по мере необходимости:
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
Важное замечание о Luau: пересекай формы таблиц (и типы функций), а не примитивы. Выражение вроде number & string не имеет смысла, поскольку ни одно значение не может одновременно быть и тем и другим. Когда тебе нужна «эта форма плюс та форма», используй &.
Во время выполнения Person, конечно, является обычной таблицей Lua: пересечение существует только для проверяющего.
Задание
ЛегкоОбъедини две небольшие формы в одну.
- Напиши
type HasName = {name: string},type HasAge = {age: number}иtype Person = HasName & HasAge. - Создай
local user: Person = {name = "Omar", age = 31}. - Выведи
`Name: {user.name}, Age: {user.age}`.
Нажми Run Code: в выводе появится Name: Omar, Age: 31.
Попробуйте сами
-- 1) type HasName, type HasAge, type Person = HasName & HasAge
-- 2) local user: Person = {...}
-- 3) выведи строку с именем и возрастом
Все уроки раздела Введение в Luau
1Начало работы с Luau
Что такое Luau?Почему именно Luau?Ваш первый код на LuauПроверка типов и режимы ошибокИтоги: Введение в Luau4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация анонимных функцийФункции без возвращаемого значенияНеобязательные параметрыЗначения параметров по умолчаниюЗначения по умолчанию для булевых параметровФункции с переменным числом аргументовОпределение типов функцийПовторение: типизированные функции2Основные типы
Число, строка и булево значениеТип 'any': запасной выходТип 'unknown'Nil и опциональные типыВывод типов на практикеЯвные аннотации типовПовторение: практика с основными типами5Псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения (Union)Работа с типами объединенияЛитеральные типыТипы пересечения (Intersection)Комбинирование псевдонимов типовИтоги: Сложные комбинации типов3Типизированные таблицы: массивы и отображения
Типизированные массивыДобавление и чтение элементовЧто такое тип отображения?Объявление и доступ к отображениямПеребор таблицТаблицы смешанной структурыЧтение сеткиСоздание сеткиtable.unpackПовторение: массивы и отображенияПотренируйтесь самостоятельно: Онлайн-компилятор Luau