Hint
The pattern <T, K extends keyof T>(obj: T, key: K): T[K] is one of TypeScript's most powerful generic signatures. It ensures property names are valid AND the return type matches the property type — no casting needed.
// Simulate T extends keyof U — type-safe property access
function getProperty(obj, key) {
// TypeScript: T extends object, K extends keyof T, returns T[K]
if (!(key in obj)) throw new Error('key not found');
return obj[key];
}
const user = { name: 'Alice', age: 30, email: 'alice@example.com' };
console.log(getProperty(user, 'name'));
console.log(getProperty(user, 'age'));
console.log(typeof getProperty(user, 'age'));
console.log(typeof getProperty(user, 'name'));
// TypeScript ensures return type matches the property type
// getProperty(user, 'name') => string
// getProperty(user, 'age') => numberAlice 30 number string
Explanation: getProperty with a K extends keyof T constraint returns T[K] — the exact type of the property accessed. TypeScript infers "Alice" returns string and 30 returns number.
Key Insight: The pattern