DEV Community

Cover image for Mastering Immutable Types with TypeScript `as const`
Adeel Imran
Adeel Imran

Posted on

Mastering Immutable Types with TypeScript `as const`

Enhance your TypeScript skills by mastering immutability and type safety with the as const feature. This guide walks you through key steps, cautionary notes, and tips for efficiency. Watch the full video here.


Objective

To improve immutability and type safety in TypeScript by leveraging the as const feature.

Section 1: Using Object.freeze for Immutability

Object.freeze is a method provided by JavaScript that makes an object immutable. When an object is frozen, you cannot add, delete, or modify its properties.

Example:

const routes = {
  home: '/',
  about: '/about',
  contact: '/contact'
};

Object.freeze(routes);

// Attempting to modify properties will fail
routes.home = '/new-home'; // Error: Cannot assign to 'home' because it is a read-only property.
Enter fullscreen mode Exit fullscreen mode

Key Points:

  1. Top-Level Immutability: Object.freeze ensures that the object routes is read-only at the top level.
  2. Nested Objects: For complete immutability, nested objects require individual wrapping with Object.freeze.

Section 2: Leveraging as const for Immutability and Type Safety

The as const feature in TypeScript enhances immutability and type safety by converting the values of an object into their literal types.

Example:

const routes = {
  home: '/',
  about: '/about',
  contact: '/contact'
} as const;

// The type of `routes` is now:
// {
//   readonly home: "/",
//   readonly about: "/about",
//   readonly contact: "/contact"
// }
Enter fullscreen mode Exit fullscreen mode

Key Points:

  1. Literal Types: as const converts the values into their literal types, providing precise type safety.
  2. Read-Only Properties: All properties become read-only, ensuring immutability without requiring Object.freeze.

Section 3: as const vs. Enums

While enums provide a way to define a set of named constants, as const offers a more intuitive and flexible approach for certain scenarios.

Example Comparison:

Using Enums:

enum Routes {
  Home = '/',
  About = '/about',
  Contact = '/contact'
}

function goToRoute(route: Routes) {
  // Logic to navigate to the route
}

goToRoute(Routes.Home);
Enter fullscreen mode Exit fullscreen mode

Using as const:

const routes = {
  home: '/',
  about: '/about',
  contact: '/contact'
} as const;

type Routes = keyof typeof routes;

function goToRoute(route: Routes) {
  // Logic to navigate to the route
}

goToRoute('home'); // Type-safe and more intuitive
Enter fullscreen mode Exit fullscreen mode

Benefits of as const:

  1. Improved Type Safety: Using as const with keyof typeof ensures that only valid keys are used.
  2. Intuitive Syntax: The syntax is straightforward and more closely aligned with JavaScript objects.
  3. Better Autocomplete: IDEs provide better autocomplete suggestions with as const, enhancing the developer experience.

By integrating these techniques, you can effectively master immutable types with TypeScript using the as const feature. Enhance your coding skills and ensure your applications are both robust and maintainable.


For a more detailed walkthrough, check out the full video tutorial on YouTube. Happy coding!


Feel free to share this blog post with your developer community to help others improve their TypeScript skills. Engage with us on Twitter @adeelibr for more coding tips and tutorials!

Top comments (0)