Këta dy operatorë ju lejojnë të nxirrni lloje nga llojet dhe vlerat ekzistuese — themeli i programimit në nivel tipi.
keyof — bashkimi i çelësave të një tipi objekti
interface User { id: number; name: string; }
type UserKey = keyof User; // "id" | "name"
typeof — tipi i një vlere
const config = { host: "localhost", port: 3000 };
type Config = typeof config; // { host: string; port: number }
typeof (në një pozicion tipi) kap tipin e nxjerrë të një vlere në kohën e ekzekutimit, kështu që nuk keni nevojë të shkruani tipin veçmas.
E kombinuar: getter-i klasik i pronës i sigurt për tipin
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
Këtu K extends keyof T kufizon key në çelësat realë, dhe T[K] (një lloj i akses të indexuar) kthen llojin e saktë të vlerës për atë çelës. Gabimet me tipat bëhen gabime të kompilimit.
Nxjerrja e një bashkimi nga një objekt const
const Roles = { Admin: "admin", User: "user" } as const;
type Role = typeof Roles[keyof typeof Roles]; // "admin" | "user"
Pse është e rëndësishme
keyof dhe typeof lidhin botën e vlerave dhe botën e tipeve.
Ata fuqizojnë aksesin e pronave të sigurta për llojin, nxjerrin lloje nga konfiguratat/konstantat (një burim i vetëm të së vërtetës) dhe janë blloqet ndërtues për llojet e hartuara dhe kushtëzuese.
Çfare është se si shmangni të mirëmbajtni me dorë përkufizime të tipit paralel.
