Kedua operator ini memungkinkan Anda menurunkan tipe dari tipe dan nilai yang sudah ada — fondasi pemrograman tingkat tipe.
keyof — gabungan kunci tipe objek
interface User { id: number; name: string; }
type = keyof ;
Kedua operator ini memungkinkan Anda menurunkan tipe dari tipe dan nilai yang sudah ada — fondasi pemrograman tingkat tipe.
interface User { id: number; name: string; }
type = keyof ;
const config = { host: "localhost", port: 3000 };
type Config = typeof config; // { host: string; port: number }
typeof (dalam posisi tipe) menangkap tipe yang disimpulkan dari nilai runtime, jadi Anda tidak perlu menulis tipe secara terpisah.
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
Di sini K extends keyof T membatasi key ke kunci nyata, dan T[K] (tipe indexed access) mengembalikan tipe nilai yang tepat untuk kunci tersebut. Typo menjadi kesalahan kompilasi.
const Roles = { Admin: "admin", User: "user" } as const;
type Role = typeof Roles[keyof typeof Roles]; // "admin" | "user"
keyof dan typeof menghubungkan dunia nilai dan dunia tipe.
Mereka memberdayakan akses properti yang aman tipe, menurunkan tipe dari config/konstanta (sumber kebenaran tunggal), dan merupakan blok bangunan untuk tipe yang dipetakan dan tipe bersyarat.
Mereka adalah cara Anda menghindari pemeliharaan manual definisi tipe paralel.