Skip to content

Type aliases

type aliases are transparent: the frontend substitutes the aliased type (including nested and generic aliases), then emits no Lua for the alias.

type Count = i64;
type Entities = Vec<i64>;
type Opt<T> = Option<T>;
fn use_aliases(n: Count, values: Entities, maybe: Opt<i64>) {
let total: Count = n;
for value in values {
let _ = value;
}
if let Some(x) = maybe {
let _ = x;
}
}

After resolution, Entities still counts as Vec (ordered ipairs), and Opt<_> still counts as Option for if let Some / lints.

OK Rejected
type Name = Path Lifetimes (type A<'a> = ...)
type Name<T> = ... Const params
Nested aliases (type A = B) Bounds / where clauses
Block-local type inside a function