Keyof Type Operator in TypeScript

Simply put, keyof grabs the keys from an object type and makes a union type out of them.

Let's look at an example since it's the quickest way to learn:

interface Person {
    name: string;
    age: number;
}

type PersonKeys = keyof Person; // "name" | "age"

Here, PersonKeys becomes either "name" or "age".

keyof is very useful when dealing with dynamic property access. It helps you avoid typos and ensures you're only accessing existing properties.

Use cases

Let's look at some good use cases for keyof.

Working with Mapped Types

It's a cornerstone for creating mapped types, where you transform types by iterating over their keys.

keyof is also foundational in creating mapped types, which transform existing types by iterating over their properties. Here's a simple readonly version of the Person type:

type ReadonlyPerson = {
    readonly [P in keyof Person]: Person[P];
};

This utility makes it easier to create types that are transformations of other types, leveraging the compile-time checks of TypeScript.

Smoother Coding Experience

Another thing I like keyof for is the coding experience.

Using keyof improves the developer experience by enabling better autocompletion in IDEs. When you use a keyof type, the IDE can suggest property names, reducing typos and errors.

It also aids in refactoring, as changing property names in the original type automatically updates the associated keyof types.


keyof is your friend for writing more robust and maintenance-friendly TypeScript code.

It's all about ensuring you're playing by the rules of your object types, keeping things type-safe, and making your developer life a bit easier.

Give it a try; hopefully, you will find it as useful as I do.

TypeScriptTs
Avatar for Niall Maher

Written by Niall Maher

Founder of Codú - The web developer community! I've worked in nearly every corner of technology businesses; Lead Developer, Software Architect, Product Manager, CTO and now happily a Founder.

Loading

Fetching comments

Hey! 👋

Got something to say?

or to leave a comment.