Open In App

TypeScript Object Types

Last Updated : 23 Jan, 2025
Summarize
Comments
Improve
Suggest changes
Like Article
Like
Share
Report
News Follow

TypeScript object types define the structure of objects by specifying property types, ensuring type safety and clarity when passing objects as function parameters.

  • Optional properties, denoted with a ? provide flexibility for objects with varying properties.
  • This approach enhances code robustness by allowing the omission of certain properties when appropriate.
interface Person {
    name: string;
    age: number;
    address?: string; // Optional property
}

function greet(person: Person): string {
    return `Hello, ${person.name}!`;
}

const user: Person = {
    name: "Alice",
    age: 30
};

console.log(greet(user)); 
  • The Person interface defines an object type with name and age as required properties, and address as an optional property.
  • The greet function accepts a parameter of type Person and returns a greeting message.
  • The user object adheres to the Person interface, and the greet function is called with this object.

Output:

Hello, Alice!

More Example of TypeScript Object Types

Defining a Car Object

interface Car {
    make: string;
    model: string;
    year: number;
    electric?: boolean; // Optional property
}

const myCar: Car = {
    make: "Tesla",
    model: "Model S",
    year: 2022,
    electric: true
};

console.log(`I drive a ${myCar.year} ${myCar.make} ${myCar.model}.`);
  • The Car interface defines an object type with make, model, and year as required properties, and electric as an optional property.
  • The myCar object adheres to the Car interface, specifying values for all properties.

Output:

I drive a 2022 Tesla Model S.

Nested Object Types for a Book

interface Author {
    name: string;
    birthYear: number;
}

interface Book {
    title: string;
    author: Author;
    pages: number;
    genre?: string; // Optional property
}

const myBook: Book = {
    title: "TypeScript Basics",
    author: {
        name: "Jane Doe",
        birthYear: 1980
    },
    pages: 350
};

console.log(`${myBook.title} by ${myBook.author.name}`);
  • The Author interface defines the structure for an author object.
  • The Book interface includes a nested author property of type Author, along with other properties.
  • The myBook object conforms to the Book interface, including a nested author object.

Output:

TypeScript Basics by Jane Doe

Function Parameter with Object Type

interface Rectangle {
    width: number;
    height: number;
}
function calculateArea(rect: Rectangle): number {
    return rect.width * rect.height;
}
const myRectangle: Rectangle = {
    width: 10,
    height: 5
};
console.log(`Area: ${calculateArea(myRectangle)}`);
  • The Rectangle interface defines the structure for a rectangle object.
  • The calculateArea function accepts a parameter of type Rectangle and returns the area.
  • The myRectangle object adheres to the Rectangle interface and is passed to the function.

Output:

Area: 50

Best Practices for Using TypeScript Object Types

  • Prefer Interfaces for Object Type Definitions: Use interface to define object shapes, as they are extendable and provide clear intent.
  • Utilize Type Aliases for Complex Types: Employ type aliases when defining complex types, such as unions or intersections, to enhance code readability.
  • Leverage Readonly Properties: Mark properties as readonly to prevent unintended mutations, ensuring data integrity.
  • Avoid Excessive Typing: Rely on TypeScript's type inference where possible to reduce redundancy and maintain cleaner code.

TypeScript Object Types - FAQs

What is the difference between object and {} in TypeScript?

The object type represents any non-primitive value, while {} refers to any value except null and undefined.

How can I define an object with dynamic keys in TypeScript?

Use index signatures to define objects with dynamic keys, specifying the key and value types.

When should I use interfaces over type aliases for object types?

Prefer interfaces for defining object shapes due to their extendability; use type aliases for complex types like unions or intersections.

Can I define optional properties in TypeScript object types?

Yes, by appending a question mark (?) to the property name, indicating that the property is optional.

How do I ensure an object's properties are immutable in TypeScript?

Use the readonly modifier to prevent reassignment of object properties, ensuring immutability.


Similar Reads

three90RightbarBannerImg