Язык программирования Crystal

type

A type declaration inside a lib declares a kind of C typedef, but stronger:

lib X
  type MyInt = Int32
end

Unlike C, Int32 and MyInt are not interchangeable:

lib X
  type MyInt = Int32

  fun some_fun(value : MyInt)
end

X.some_fun 1 # Error: argument 'value' of 'X#some_fun'
             # must be X::MyInt, not Int32

Thus, a type declaration is useful for opaque types that are created by the C library you are wrapping. An example of this is the C FILE type, which you can obtain with fopen.

Refer to the type grammar for the notation used in typedef types.