← Concepts

Object Types

In TypeScript, object types let you define the shape of an object. Alongside string, number and boolean, it's one of the most commonly used annotations in a TypeScript codebase. There are three main ways they're declared.

The first is to use the interface keyword:

interface User {
  name: string;
  age: number;
  email: string;
}

In this example, User is an object type with three properties: name, age, and email. You can also define an object type inline:

function printUser(user: {
  name: string;
  age: number;
  email: string;
}) {
  console.log(`Name: ${user.name}`);
  console.log(`Age: ${user.age}`);
  console.log(`Email: ${user.email}`);
}

In this example, the printUser function accepts an object with three properties: name, age, and email. This is equivalent to the User interface defined above.

You can also use the type keyword:

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

Defining object types will give you a few different kinds of safety. It'll prevent you from passing objects with incorrectly typed or missing properties:

const printUser = (user: User) => {};

printUser({
  name: "John Doe",
  age: 42,
}); // Type error - email is missing!

printUser({
  name: "John Doe",
  age: "42",
  email: "john@doe.com",
}); // Type error - age is the wrong type!

It'll also give you type safety (and autocomplete!) when accessing properties on objects:

const printUser = (user: User) => {
  user.doesNotExist; // doesNotExist is not a property on User!
};