Псевдонимы типов
Syntax
TypeAlias →
type IDENTIFIER GenericParams? ( : TypeParamBounds )?
WhereClause?
( = Type WhereClause? )? ;
Псевдоним типа определяет новое имя для существующего типа в пространстве имён типов модуля или блока, где он находится.
Псевдонимы типов объявляются с ключевым словом type.
Каждое значение имеет единственный, конкретный тип, но может реализовывать несколько различных трейтов и может быть совместимо с несколькими различными ограничениями типов.
Например, следующее определяет тип Point как синоним типа
(u8, u8), типа пар 8-битных целых чисел без знака:
#![allow(unused)] fn main() { type Point = (u8, u8); let p: Point = (41, 68); }
Псевдоним типа для кортежной структуры или единичной структуры не может использоваться для квалификации конструктора этого типа:
#![allow(unused)] fn main() { struct MyStruct(u32); use MyStruct as UseAlias; type TypeAlias = MyStruct; let _ = UseAlias(5); // OK let _ = TypeAlias(5); // Не работает }
Псевдоним типа, когда не используется как ассоциированный тип, должен включать Тип и не может включать TypeParamBounds.
Псевдоним типа, когда используется как ассоциированный тип в трейте, не должен включать спецификацию Типа, но может включать TypeParamBounds.
Псевдоним типа, когда используется как ассоциированный тип в реализации трейта, должен включать спецификацию Типа и не может включать TypeParamBounds.
Where-предложения перед знаком равенства в псевдониме типа в реализации трейта (например,
type TypeAlias<T> where T: Foo = Bar<T>) устарели. Where-предложения после
знака равенства (например, type TypeAlias<T> = Bar<T> where T: Foo) предпочтительны.