Ключевое слово type

Определение псевдонима для существующего типа.

Синтаксис: type Имя = СуществующийТип;

Примеры

type не создаёт новый тип:

#![allow(unused)]
fn main() {
type Meters = u32;
type Kilograms = u32;

let m: Meters = 3;
let k: Kilograms = 3;

assert_eq!(m, k);
}

Тип может быть обобщённым (generic):

#![allow(unused)]
fn main() {
type ArcMutex<T> = Arc<Mutex<T>>;
}

В трейтах type используется для объявления ассоциированного типа:

#![allow(unused)]
fn main() {
trait Iterator {
    // объявление ассоциированного типа
    type Item;
    fn next(&mut self) -> Option<Self::Item>;
}

struct Once<T>(Option<T>);

impl<T> Iterator for Once<T> {
    // определение ассоциированного типа
    type Item = T;
    fn next(&mut self) -> Option<Self::Item> {
        self.0.take()
    }
}
}

Тип может быть обобщённым (generic):

#![allow(unused)]
fn main() {
type ArcMutex<T> = Arc<Mutex<T>>;
}

В трейтах type используется для объявления ассоциированного типа:

#![allow(unused)]
fn main() {
trait Iterator {
    // объявление ассоциированного типа
    type Item;
    fn next(&mut self) -> Option<Self::Item>;
}

struct Once<T>(Option<T>);

impl<T> Iterator for Once<T> {
    // определение ассоциированного типа
    type Item = T;
    fn next(&mut self) -> Option<Self::Item> {
        self.0.take()
    }
}
}