Ova dva operatora omogućavaju vam da izvedete tipove iz postojećih tipova i vrijednosti — temelj programiranja na razini tipova.
keyof — unija ključeva tipa objekta
ts
interface User { id: number; name: string; }
type = keyof ;
Ova dva operatora omogućavaju vam da izvedete tipove iz postojećih tipova i vrijednosti — temelj programiranja na razini tipova.
interface User { id: number; name: string; }
type = keyof ;
const config = { host: "localhost", port: 3000 };
type Config = typeof config; // { host: string; port: number }
typeof (u položaju tipa) hvata zaključeni tip vrijednosti iz vremena izvršavanja, tako da ne morate pisati tip zasebno.
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
Ovdje K extends keyof T ograničava key na pravi ključeve, a T[K] (tip indexed access) vraća točan tip vrijednosti za taj ključ. Tipfeler postaju greške pri kompajliranju.
const Roles = { Admin: "admin", User: "user" } as const;
type Role = typeof Roles[keyof typeof Roles]; // "admin" | "user"
keyof i typeof povezuju svijet vrijednosti i svijet tipova.
Oni omogućavaju type-bezbijedan pristup svojstvima, izvođenje tipova iz konfiguracije/konstanti (jedan izvor istine), te su gradivni blokovi za mapirane i uvjetne tipove.
To je način da izbjegnete ručno održavanje paralelnih definicija tipova.