Reference articles on history, science, culture and more
Encyclopedia

Type aliasing

Type aliasing is a feature in some programming languages that allows creating a reference to a type using another name. It does not create a new type hence does not increase type safety. It can be used to shorten a long name. Languages allowing type aliasing include: C++, C# Crystal, D, Dart, Elixir, Elm, F#, Go, Hack, Haskell, Julia, Kotlin, Nim, OCaml, Python, Rust, Scala, Swift and TypeScript.

01Example

C++

C++ features type aliasing with the using keyword.

using Distance = int;

C#

C# version 12 and higher supports type aliasing with the using keyword. Earlier versions restrict its use to file-local scope or specific import contexts..

using Distance = int;

Crystal

Crystal features type aliasing using the alias keyword.

alias Distance = Int32;

D

D features type aliasing using the alias keyword.

alias Distance = int;

Dart

Dart features type aliasing using the typedef keyword.

typedef Distance = int;

Elixir

Elixir features type aliasing using @type.

@type Distance :: integer

Elm

Elm features type aliasing using type alias.

type alias Distance = Int

F#

F3 features type aliasing using the type keyword.

type Distance = int

Go

Go features type aliasing using the type keyword and =.

type Distance = int

Hack

Hack features type aliasing using the newtype keyword. Functionally, this creates a new, distinct type that is incompatible with its underlying type (int). This is stricter than a simple alias, which is generally transparent and interchangeable with the original type.

newtype Distance = int;

Haskell

Haskell features type aliasing using the type keyword.

type Distance = Int;

Julia

Julia features type aliasing. The use of const is best practice (though not strictly required for aliasing). It prevents the alias from being rebound to a different type later in the program, ensuring the alias is stable.

const Distance = Int

Kotlin

Kotlin features type aliasing using the typealias keyword.

typealias Distance = Int

Nim

Nim features type aliasing.

type Distance* = int

OCaml

OCaml features type aliasing.

type distance = int

Python

Python features type aliasing.

Vector = list[float]

Type aliases may be marked with TypeAlias to make it explicit that the statement is a type alias declaration, not a normal variable assignment. The use of : TypeAlias (from PEP 613) is not required for the alias to function, but it explicitly tells static type checkers (like Mypy) that the assignment is a type declaration, not a runtime variable assignment.

from typing import TypeAlias Vector: TypeAlias = list[float]

Rust

Rust features type aliasing using the type keyword.

type Point = (u8, u8);

Scala

Scala can create type aliases using opaque types.

object Logarithms: opaque type Logarithm = Double

Swift

Swift features type aliasing using the typealias keyword.

typealias Distance = Int;

TypeScript

TypeScript features type aliasing using the type keyword.

type Distance = number;

Zig

Zig features type aliasing by assigning a data type to a constant.

const distance = u32;
Watch videos about Type aliasingExplainers and documentaries on YouTube (opens in a new tab)

Sources and credits

This article is adapted from the Wikipedia article Type aliasing, written by its contributors and licensed under CC BY-SA 4.0. Fathomly has changed the layout, removed citation markers, navigation and maintenance notices, and adjusted punctuation. This adapted version is shared under the same license. For references, see the original article.

Fathomly is not affiliated with or endorsed by the Wikimedia Foundation. Spotted a problem? Tell us.