类型别名

语法
类型别名组 :
   type 标识符 泛型参数组? ( : 类型参数约束组 )? Where从句? ( = 类型 Where从句?)? ;

类型别名 为现有 类型 定义了一个新的名称。类型别名使用关键字 type 进行声明。 每个值都有一个特定的类型,但可以实现多个不同的 trait,或兼容多个不同类型的约束。

例如,以下代码将类型 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); // Doesn't work
}

当类型别名不作为关联类型使用时,必须包含一个 类型 ,不能包含 类型参数约束组

trait 中使用作为 关联类型 的类型别名,不应该包含类型本身的声明 类型 ,但是可以包含类型参数约束声明 类型参数约束组

类型别名在 trait impl 中作为 关联类型 使用时,必须包括 类型 ,但不能包括 类型参数约束组

trait impl 中,位于类型别名等号之前的 where 从句已被弃用 (例如 type TypeAlias<T> where T: Foo = Bar<T> ) 。 首选的是 where 从句位于等号之后 (例如 type TypeAlias<T> = Bar<T> where T: Foo ) 。