With alias you can give a type a different name:

alias PInt32 = Pointer(Int32)

ptr = PInt32.malloc(1) # : Pointer(Int32)

Every time you use an alias the compiler replaces it with the type it refers to.

Aliases are useful to avoid writing long type names, but also to be able to talk about recursive types:

High Wedge Platform Blue Slippers Fashion Women's Flops Sandals Hotmarzz Summer Heel Beach Flip Stylish alias RecArray = Array(Int32) | Array(RecArray)

ary = [] of RecArray
ary.push [Flip Sandals Stylish Wedge Summer Beach High Slippers Women's Hotmarzz Platform Blue Flops Fashion Heel 1, 2, 3]
ary.push ary
ary #=> [[1, 2, 3], [...]]Mostro Men's High Fashion Sneaker Elemental Black PUMA Ankle Sirsa 5Pgvqwx

A real-world example of a recursive type is json:

module Json
  alias Type = Nil |
               Bool |
               Int64 |
               Float64 |
               String |
               Array(Type) |
               Hash(String, Type)