Course

TypeScript Interface: Syntax, Usage, and Examples

A TypeScript interface defines the structure of an object by specifying property names and their expected types. Interfaces help enforce consistency across different parts of your code without generating additional JavaScript.

What Is an Interface in TypeScript?

An interface in TypeScript is a way to define the expected shape of an object. Unlike classes, interfaces do not generate JavaScript code; they exist purely for type-checking during development.

tsx
interface User { name: string; age: number; isAdmin: boolean; } let user: User = { name: "Alice", age: 30, isAdmin: false, };

Here, the User interface ensures every user object has a name, age, and isAdmin property with the correct types.

How to Use TypeScript Interfaces

Define an Interface

You can define an interface using the interface keyword:

tsx
interface Product { id: number; name: string; price: number; }

Now, any object assigned to this type must match the specified structure.

Implement an Interface in a Class

A class can implement an interface to enforce structure:

tsx
interface Animal { name: string; makeSound(): void; } class Dog implements Animal { name: string; constructor(name: string) { this.name = name; } makeSound() { console.log("Woof!"); } }

The Dog class must include a name property and a makeSound method, as required by Animal.

Extend an Interface

You can extend an existing interface to add more properties.

tsx
interface Employee { name: string; id: number; } interface Manager extends Employee { department: string; } let teamLead: Manager = { name: "John", id: 101, department: "Engineering", };

The Manager interface includes all properties from Employee and adds department.

Use an Interface to Define Function Parameters

You can pass an interface as an argument to a function.

tsx
interface Person { firstName: string; lastName: string; } function getFullName(person: Person): string { return `${person.firstName} ${person.lastName}`; } let user = { firstName: "Jane", lastName: "Doe" }; console.log(getFullName(user)); // Output: Jane Doe

When Should You Use TypeScript Interfaces?

Enforce Consistency

Interfaces make sure all objects follow a consistent structure. If you accidentally omit a required property, TypeScript throws an error.

tsx
interface Car { brand: string; year: number; } let myCar: Car = { brand: "Toyota" }; // Error: Property 'year' is missing

Improve Code Readability

By defining clear object shapes, interfaces help other developers understand your code more easily.

Enable Type Safety in Function Parameters

Using interfaces in function parameters ensures valid data structures:

tsx
interface Order { productId: number; quantity: number; } function processOrder(order: Order) { console.log(`Processing order for product ${order.productId}, quantity: ${order.quantity}`); }

Examples of TypeScript Interfaces

Use an Interface for an Array

You can declare an array of objects using an interface.

tsx
interface Book { title: string; author: string; } let books: Book[] = [ { title: "The Hobbit", author: "J.R.R. Tolkien" }, { title: "1984", author: "George Orwell" }, ];

Use Optional Fields in Interfaces

You can make properties optional by adding ? after the property name.

tsx
interface User { name: string; email?: string; // Optional property } let user1: User = { name: "Alice" }; let user2: User = { name: "Bob", email: "bob@example.com" };

Define a Function Signature in an Interface

Interfaces can describe function shapes.

tsx
interface MathOperation { (x: number, y: number): number; } let add: MathOperation = (a, b) => a + b; console.log(add(5, 3)); // Output: 8

TypeScript Pass Interface as Argument

You can use interfaces as function arguments to enforce object structure.

tsx
interface Student { name: string; grade: number; } function printStudent(student: Student) { console.log(`${student.name} is in grade ${student.grade}`); } printStudent({ name: "Lily", grade: 10 });

Declare an Array of Type Interface

You can declare an array of objects conforming to an interface.

tsx
interface Task { id: number; title: string; } let tasks: Task[] = [ { id: 1, title: "Learn TypeScript" }, { id: 2, title: "Build a project" }, ];

TypeScript Model Class vs. Interface

A model class includes both data and behavior, while an interface only defines the structure.

tsx
interface Vehicle { brand: string; } class Car implements Vehicle { brand: string; constructor(brand: string) { this.brand = brand; } drive() { console.log(`${this.brand} is driving`); } }

Use an interface for type-checking and a class when you need logic inside your objects.

TypeScript Interface Default Value

Interfaces do not support default values directly, but you can use a factory function.

tsx
interface Config { theme: string; darkMode?: boolean; } function createConfig(config: Config = { theme: "light" }): Config { return { darkMode: false, ...config }; } console.log(createConfig()); // { theme: 'light', darkMode: false }

TypeScript Extend Interface

You can extend an interface to create specialized types.

tsx
interface Animal { species: string; } interface Cat extends Animal { meow(): void; } let kitty: Cat = { species: "Feline", meow: () => console.log("Meow!"), }; kitty.meow(); // Output: Meow!

TypeScript Implement Interface

Classes can use interfaces to enforce a contract.

tsx
interface Logger { log(message: string): void; } class ConsoleLogger implements Logger { log(message: string) { console.log(`Log: ${message}`); } } let logger = new ConsoleLogger(); logger.log("Hello, world!");

TypeScript Interface Inherit

Interfaces can inherit from multiple interfaces.

tsx
interface Engine { horsepower: number; } interface Wheels { count: number; } interface Car extends Engine, Wheels { brand: string; } let myCar: Car = { brand: "Tesla", horsepower: 300, count: 4 };

TypeScript Interface Array

You can create an interface for array elements.

tsx
interface Person { name: string; age: number; } let people: Person[] = [ { name: "Eve", age: 28 }, { name: "Mike", age: 35 }, ];