Disse to operatorer lader dig udlede typer fra eksisterende typer og værdier — grundlaget for type-level programmering.
keyof — unionen af en objekttypes nøgler
ts
interface User { id: number; name: string; }
type = keyof ;
const config = { host: "localhost", port: 3000 };
type Config = typeof config; // { host: string; port: number }
typeof (i en type-position) fanger den infererede type af en runtime-værdi, så du ikke skal skrive typen separat.
function getProp<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const user = { id: 1, name: "Ann" };
getProp(user, "name"); // returns string
getProp(user, "age"); // ❌ Error: "age" is not a key of user
Her begrænser K extends keyof T key til rigtige nøgler, og T[K] (en indexed access type) giver den nøjagtige værditype tilbage for den pågældende nøgle. Stavefejl bliver til compile-fejl.
const Roles = { Admin: "admin", User: "user" } as const;
type Role = typeof Roles[keyof typeof Roles]; // "admin" | "user"
keyof og typeof forbinder værdi-verden og type-verden.
De muliggør type-sikker property-adgang, udledning af typer fra config/konstanter (enkelt kilde til sandhed), og er byggesten for mapped og conditional types.
De er hvordan du undgår at vedligeholde parallelle type-definitioner manuelt.