3.6 Псевдонимы, новые и уточнённые типы
type Bytes2 = [u8; 2] // псевдоним, тот же тип
type UserId = distinct u64 // новый тип, без неявных приведений
type Port = u16 where 1..=65535 // уточнённый тип
type Name = str where len(1..=64)
type Email = str where matches(re".+@.+\..+")distinct Tсоздаёт новый номинальный тип с представлениемT. КонструкторUserId(5), извлечениеid.raw. Операторы и методыTне наследуются, если не объявлен@derive(...).- Уточнённый тип
T where P—distinct-тип с инвариантомP(comptime-выражение надselfили сокращенияlen(range),matches(re), диапазонa..=b). - Получение значения уточнённого типа: (1) литерал-константа — проверка при компиляции; (2)
Port.from(x)→Port | InvalidValue; (3) десериализация — проверка автоматически (§9.4); (4)Port.unchecked(x)— только вunsafe. - Уточнение прямо в поле (
name: str where len(1..=64)) объявляет анонимный уточнённый тип с теми же правилами. - Значение уточнённого типа неявно приводится к базовому типу (
Port→u16), обратно — нет.
Связанные диагностики
См. также
Исходник: docs/spec/oxl-standard.md