interface User { name: string; age: number }
type UserKey = keyof User // β 'name' | 'age'
function getField(u: User, k: UserKey) { return u[k] }keyof produces a union of an object type's property names, enabling type-safe property access.
keyof T produces a union of all property names of T.
Challenge: Implement getKeys<T extends object>(obj: T): (keyof T)[] returning all own keys.
getKeys({ a: 1, b: 2, c: 3 }) // β ['a', 'b', 'c']