What if your code could instantly know all the valid property names without you typing them again?
Why Keyof operator in Typescript? - Purpose & Use Cases
Imagine you have an object with many properties, and you want to write code that works with these properties safely. Without a tool, you might write property names as plain strings everywhere.
For example, you want to get or check a property by name, but you have to type the property names manually each time.
Typing property names manually is slow and risky. If you make a typo, your code might break, but you won't know until you run it.
Also, if the object changes (like adding or removing properties), you have to find and fix all those strings manually.
The Keyof operator in TypeScript lets you get all the keys of an object type as a union of string literals.
This means you can write code that automatically knows the valid property names, so you get help from the editor and avoid mistakes.
function getValue(obj: any, key: string) { return obj[key]; }function getValue<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; }It enables safer and smarter code that automatically adapts to object properties, reducing bugs and saving time.
When building a form with many fields, you can use keyof to ensure you only access valid field names, preventing errors when reading or updating form data.
Typing property names manually is error-prone and hard to maintain.
Keyof operator extracts valid keys from object types automatically.
This leads to safer, cleaner, and more maintainable code.
Practice
keyof operator do in TypeScript?Solution
Step 1: Understand the purpose of
Thekeyofkeyofoperator takes an object type and produces a union of its keys as string literal types.Step 2: Compare options with definition
Only "It creates a union type of all keys of an object type." correctly describes this behavior. The other options describe unrelated TypeScript features.Final Answer:
It creates a union type of all keys of an object type. -> Option CQuick Check:
keyof= union of keys [OK]
keyof lists keys, not values or types [OK]- Confusing
keyofwith getting values - Thinking it returns runtime keys instead of types
- Mixing it up with return type extraction
Person using keyof?Solution
Step 1: Recall correct
The correct syntax iskeyofsyntaxkeyof TypeNamewithout parentheses or dot notation.Step 2: Evaluate each option
type Keys = keyof Person; uses correct syntax. type Keys = keyof(Person); incorrectly uses parentheses. type Keys = keys<Person>; uses a non-existentkeyskeyword. type Keys = Person.keyof; uses invalid dot notation.Final Answer:
type Keys = keyof Person; -> Option DQuick Check:
Correct syntax =keyof Type[OK]
keyof TypeName without parentheses [OK]- Adding parentheses around the type
- Using dot notation like
Type.keyof - Confusing
keyofwithkeys
type Car = { make: string; model: string; year: number };
type CarKeys = keyof Car;
let key: CarKeys = 'year';
console.log(key);What is the output when this code runs?
Solution
Step 1: Understand
keyofusageCarKeysis a union of keys: 'make' | 'model' | 'year'. The variablekeyis assigned the string 'year', which is valid.Step 2: Check console output
The console logs the value ofkey, which is 'year'. No errors occur.Final Answer:
'year' -> Option AQuick Check:
Assigned key = 'year' [OK]
- Expecting runtime error for type assignment
- Confusing keys with values
- Thinking
keyofreturns values
type User = { id: number; name: string };
function getValue(obj: User, key: keyof User) {
return obj.key;
}Solution
Step 1: Analyze property access in function
The function tries to accessobj.key. Sincekeyis a variable, dot notation looks for a property literally named 'key'.Step 2: Correct property access syntax
To use a variable key, bracket notationobj[key]is required to access the dynamic property.Final Answer:
Using dot notation with variable key instead of bracket notation. -> Option AQuick Check:
Useobj[key]for dynamic keys [OK]
- Using dot notation with variable keys
- Ignoring TypeScript error messages
- Assuming
keyofis invalid
keyof? Choose the correct implementation.Solution
Step 1: Understand generic constraints with
To ensure the key is valid for the object, the key typekeyofKmust extendkeyof T. This restricts keys to valid property names.Step 2: Check return type and access
The return type should beT[K], the type of the property at keyK. Accessingobj[key]returns this value safely.Step 3: Evaluate options
function getProp(obj: T, key: K): T[K] { return obj[key]; } correctly uses generics andkeyof. function getProp<T>(obj: T, key: string): any { return obj.key; } uses string key and dot notation, which is unsafe. function getProp<T>(obj: T, key: keyof T): string { return obj[key]; } fixes key type but wrongly fixes return type to string. function getProp(obj: T, key: K): K { return obj[key]; } lacks constraint onKand returns wrong type.Final Answer:
function getProp<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; } -> Option BQuick Check:
Generic key constrained bykeyof= safe access [OK]
K extends keyof T and return T[K] [OK]- Not constraining key type with
keyof - Using string keys without type safety
- Returning wrong or fixed types
Ready to prove it?
Pass the test and this pattern moves unknown
