runtime.boot

Full Stack Systems
Production Mindset

CodeWithMihir

Engineering thoughtful products from interface to infrastructure.

CodeWithMihir

TypeScript Tutorial

TypeScript Type Aliases Explained

Learn how TypeScript type aliases work, including object types, union aliases, function aliases, intersections, and practical examples.

Welcome back! I am Mihir, and in this lesson we will learn type aliases in TypeScript.

A type alias gives a name to a type so you can reuse it across your code.


Basic Type Alias

type Username = string;

let name: Username = "Mihir";

Username is now another name for string.

This is useful when a basic type has business meaning.


Object Type Alias

The most common use is naming object shapes.

type User = {
  id: number;
  name: string;
  email: string;
};

const user: User = {
  id: 1,
  name: "Mihir",
  email: "mihir@example.com",
};

Now you can use User anywhere you need this structure.


Optional Properties

type Product = {
  id: number;
  name: string;
  description?: string;
};

description is optional.

Valid:

const product: Product = {
  id: 101,
  name: "Keyboard",
};

Readonly Properties

type Account = {
  readonly id: number;
  email: string;
};

You can read id, but you cannot change it after creation.

const account: Account = {
  id: 1,
  email: "user@example.com",
};

account.email = "new@example.com";

Invalid:

account.id = 2;

Union Type Alias

Type aliases are excellent for unions.

type Status = "pending" | "success" | "failed";

let paymentStatus: Status = "pending";

Invalid:

paymentStatus = "done";

Only the listed values are allowed.


Function Type Alias

You can also name function shapes.

type CalculateTotal = (price: number, quantity: number) => number;

const calculateTotal: CalculateTotal = (price, quantity) => {
  return price * quantity;
};

This keeps callback-heavy code much cleaner.


Combining Types with Intersection

type HasId = {
  id: number;
};

type HasTimestamps = {
  createdAt: Date;
  updatedAt: Date;
};

type DatabaseUser = HasId & HasTimestamps & {
  name: string;
};

DatabaseUser must have all properties from all combined types.


Type Alias Cannot Be Reopened

You cannot define the same type alias twice.

type User = {
  name: string;
};

type User = {
  email: string;
};

This causes an error.

Interfaces behave differently, which we will learn next.


Quick Recap

  • A type alias gives a reusable name to a type.
  • Use type for objects, unions, literals, functions, and intersections.
  • Type aliases make code easier to read and maintain.
  • A type alias cannot be reopened with another declaration of the same name.

Next up, we will learn Interfaces →, another powerful way to describe object shapes in TypeScript.