TS keyof

TypeScript keyof

The keyof operator takes an object type and produces a string or numeric literal union.

It dynamically extracts the exact names of the properties present in an interface or type.

This is incredibly helpful for creating constraints on function parameters.

It ensures you never try to access a property string that doesn't actually exist.


1. Using keyof

When you apply keyof to an interface, it generates a union type of its keys.

If the interface changes later, the union type automatically updates itself!

This creates a highly dynamic and resilient typing environment.

Basic keyof Example:

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

// This becomes: "name" | "age" type PersonKeys = keyof Person;

let validKey: PersonKeys = "name"; // Perfect // let invalidKey: PersonKeys = "email"; // Error!

console.log("Valid Key:", validKey);


2. Dynamic Property Access

A very common use case is creating a function that gets a property from an object safely.

By combining Generics with keyof, you can perfectly type the return value dynamically.

This prevents runtime crashes caused by typos in string property lookups.

Dynamic Access Example:

function getProp<T, K extends keyof T>(obj: T, key: K) {
  return obj[key];
}

const user = { username: "Akash", id: 101 }; let username = getProp(user, "username"); // Highly safe!

console.log("Fetched Property:", username);


3. SEO and Type Safety

Eliminating typos at compile time ensures your web logic is fully functional.

Unbroken data flows allow your pages to render properly for Google's indexing bots.

Dynamic types like keyof ensure your infrastructure scales without breaking.

Type Safety Example:

type AppSettings = { theme: string; version: number };

// Ensures we only loop through valid settings type SettingKeys = keyof AppSettings;

let key: SettingKeys = "theme"; console.log("Selected Key:", key);


Exercise

?

What does the keyof operator produce?


4. Final Thoughts

The keyof operator is advanced but undeniably essential for writing generic libraries.

It is the secret sauce behind many built-in utilities like Pick and Omit.

Next, we'll talk about safely handling Null and Undefined values!