Typescript Defining And Using Interfaces Complete Guide

 Last Update:2025-06-22T00:00:00     .NET School AI Teacher - SELECT ANY TEXT TO EXPLANATION.    6 mins read      Difficulty-Level: beginner

Understanding the Core Concepts of TypeScript Defining and Using Interfaces

TypeScript: Defining and Using Interfaces

Introduction to Interfaces

Defining Interfaces

Defining an interface in TypeScript is straightforward. Interfaces can include properties and methods signatures that an object must implement. Here’s how you can define an interface:

interface Person {
    firstName: string;
    lastName: string;
    age?: number; // Optional property
    greet: (message: string) => void; // Method signature
}
  • firstName and lastName are required properties and must be of type string.
  • age is an optional property indicated by the ?. It is of type number.
  • greet is a method that takes a string as an argument and does not return a value (indicated by void).

Using Interfaces

Once you have defined an interface, you can use it to ensure that objects conform to the expected shape.

let user: Person = {
    firstName: "John",
    lastName: "Doe",
    age: 28,
    greet: function(message: string) {
        console.log(`${message}, my name is ${this.firstName} ${this.lastName}`);
    }
};

user.greet("Hello"); // Output: Hello, my name is John Doe
  • Here, user must have all the properties and methods defined in the Person interface. Failing to provide them will result in a compile-time error.

Optional Properties

Interfaces can include optional properties which are not required for an object to implement. These properties are useful when you might not always have data available but still want to define a structure.

interface Employee {
    id: number;
    name: string;
    department?: string; // Optional
}

let emp1: Employee = {
    id: 1,
    name: "Alice"
};

let emp2: Employee = {
    id: 2,
    name: "Bob",
    department: "Engineering"
};

Readonly Properties

Sometimes, we need properties that cannot be changed after their initial assignment. Interfaces allow you to specify readonly properties using the readonly keyword.

interface Point {
    readonly x: number;
    readonly y: number;
}

let p1: Point = { x: 10, y: 20 };
p1.x = 30; // Error: Cannot assign to 'x' because it is a read-only property

Extending Interfaces

Interfaces can extend other interfaces using the extends keyword. This allows you to create more complex object shapes by building on existing interfaces.

interface Shape {
    color: string;
}

interface Square extends Shape {
    sideLength: number;
}

let square: Square = {
    color: "blue",
    sideLength: 10
};
  • Square extends Shape, thus it must include all properties from Shape and its own unique properties.

Function Types as Interfaces

Interfaces can also describe the shape of functions, which is useful for defining callbacks and event handlers.

interface SearchFunc {
    (source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
    let result = source.search(subString);
    return result > -1;
};
  • Here, SearchFunc describes a function that takes two string arguments and returns a boolean.

Indexable Types with Interfaces

Interfaces can define indexable types, which are useful for defining dictionaries or arrays where the properties can be accessed by index.

interface NumberDictionary {
    [index: string]: number;
    length: number; // error
    name: string;   // error, the property `name` must be of type `number`.
}

interface ArrayDictionary {
    [index: number]: string;
    0: 'John';
    1: 'Jane';
}
  • The index signature [index: string]: number; specifies that any string index on the object must return a number.

Conclusion

Using interfaces in TypeScript is fundamental for defining well-structured objects. By leveraging optional properties, readonly modifiers, function types, and indexable types, interfaces provide a powerful way to enforce type correctness and improve the robustness of the codebase. Mastering interfaces will enhance your TypeScript skills and make your codebase more maintainable and scalable.


Online Code run

🔔 Note: Select your programming language to check or run code at

💻 Run Code Compiler

Step-by-Step Guide: How to Implement TypeScript Defining and Using Interfaces

Step 1: Setting Up TypeScript

First, you need to have TypeScript installed on your machine. You can install TypeScript globally using npm:

npm install -g typescript

Create a new directory for your TypeScript project, navigate into it, and initialize a new TypeScript configuration file (tsconfig.json):

mkdir ts-interface-example
cd ts-interface-example
tsc --init

Step 2: Defining an Interface

An interface in TypeScript defines the structure of an object. Let's define a simple interface to represent a User.

Create a new file named User.ts:

// User.ts
interface User {
    id: number;
    name: string;
    email: string;
    isActive: boolean;
    age?: number; // Optional property
}

export { User };

In this example:

  • id, name, email, and isActive are required properties.
  • age is an optional property, indicated by ?.

Step 3: Using the Interface

Now, let's create a main.ts file where we will use the User interface to create and manipulate user objects.

Create main.ts:

// main.ts
import { User } from './User';

// Function to print user details
function printUser(user: User): void {
    console.log(`User ID: ${user.id}`);
    console.log(`Name: ${user.name}`);
    console.log(`Email: ${user.email}`);
    console.log(`Active: ${user.isActive}`);
    console.log(`Age: ${user.age !== undefined ? user.age : 'Not specified'}`);
}

// Create a user
const user1: User = {
    id: 1,
    name: 'John Doe',
    email: 'john.doe@example.com',
    isActive: true,
    age: 30,
};

// Create another user without age
const user2: User = {
    id: 2,
    name: 'Jane Doe',
    email: 'jane.doe@example.com',
    isActive: false,
};

// Print user details
printUser(user1);
console.log('-----------------');
printUser(user2);

Step 4: Compiling and Running the TypeScript Code

To compile the TypeScript code to JavaScript, use the TypeScript compiler (tsc):

tsc

This command will generate a main.js and User.js file in the same directory. Now, you can run the compiled JavaScript code using Node.js:

node main.js

Step 5: Output

The output should be:

Top 10 Interview Questions & Answers on TypeScript Defining and Using Interfaces

1. What is an Interface in TypeScript?

Answer: An interface in TypeScript is a structure that defines the contract in your application. It is a way to define syntax for objects to follow. Interfaces define properties, methods, and events, which are the members of the interface. Interfaces contain only the declaration of the members and not their implementation.

2. How do you define an Interface in TypeScript?

Answer: You define an interface using the interface keyword followed by the name of the interface and curly braces containing members (properties or methods). Here is an example:

interface Person {
    name: string;
    age: number;
    greet(): void;
}

3. Can an interface have optional properties?

Answer: Yes, an interface can have optional properties. You specify an optional property by adding a question mark (?) after the property name in the interface definition. For example:

interface Person {
    name: string;
    age?: number; // Optional property.
}

4. How are interfaces different from types in TypeScript?

Answer: Both interfaces and types are used to type-check JavaScript/TypeScript code but they have different use cases. Interfaces are primarily used to declare object shapes, whereas types can use more complex constructs such as unions, intersections, primitives, and tuples.

5. Can interfaces be extended like classes?

Answer: Yes, interfaces can extend other interfaces and thus inherit their members. This is done using the extends keyword. Multiple inheritance is possible in TypeScript interfaces. For example:

interface Named {
    name: string;
}

interface Aged {
    age: number;
}

interface Person extends Named, Aged {
    greet(): void;
}

6. How do you implement an interface in a class?

Answer: A TypeScript class can implement an interface using the implements keyword. The class must provide implementations for all the members declared in the interface. Here’s an example:

interface Shape {
    getArea(): number;
}

class Circle implements Shape {
    radius: number;
    constructor(_radius: number) {
        this.radius = _radius;
    }

    getArea(): number {
        return Math.PI * Math.pow(this.radius, 2);
    }
}

7. Can interfaces be merged?

Answer: Yes, in TypeScript, interfaces with the same name are automatically merged. When this happens, the properties of both interfaces are combined into a single interface. If a property has different types in the two interfaces, TypeScript will throw an error.

interface Box {
    height: number;
    width: number;
}

interface Box {
    scale: number;
}

// Box now has properties height, width, and scale.

8. What is a hybrid type in TypeScript with respect to interfaces?

Answer: A hybrid type in TypeScript is a type that combines both object and function interfaces into a single type. This is useful in scenarios where you want to create an object that can also act like a function.

interface Counter {
    (start: number): string;
    interval: number;
    reset(): void;
}

let c: Counter;

function getCounter(): Counter {
    let counter = function (start: number) { };
    counter.interval = 123;
    counter.reset = function () { };
    return counter;
}

c = getCounter();
c(10);
c.reset();
c.interval = 5.0;

9. How do you define a function type with an interface in TypeScript?

Answer: You can define a function type within an interface by specifying the parameters and return type of the function. Here's an example:

interface SearchFunc {
    (source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
    let result = source.search(subString);
    return result > -1;
}

10. Are interfaces closed or open in TypeScript?

Answer: Interfaces in TypeScript are considered open. This means that you can add new members to an existing interface with the same name elsewhere in the program. This facilitates the creation of a single interface that can be built up over time and by different pieces of code in your project.

You May Like This Related .NET Topic

Login to post a comment.