×

typescript · level 3 · unit 2 · lesson 4

  1. meet it
  2. guess first
  3. your turn
  4. fix it
  5. nailed it

Tap a green word if you get lost.

meet it

lists every key of a type as a union.

keyof Pet reads the keys of the type Pet and makes a union of literal types. If Pet has name and age, then keyof Pet is "name" | "age". For a value, add a type query first: keyof typeof settings.

It shines in functions. K extends keyof T means K must be one of the real keys of T. A misspelt key, like "nmae", is caught by the checker instead of quietly giving undefined at runtime.

interface Pet {
  name: string;
  age: number;
}
type PetKey = keyof Pet;
const field: PetKey = "age";
function show<T, K extends keyof T>(item: T, key: K): void {
  console.log(`${String(key)}: ${item[key]}`);
}
const rex: Pet = { name: "Rex", age: 4 };
show(rex, field);
show(rex, "name");

String(key) is needed because keys can also be numbers or symbols, a rarer kind of key.