Αυτοί οι δύο τελεστές σας επιτρέπουν να εξάγετε τύπους από υπάρχοντες τύπους και τιμές — το θεμέλιο του προγραμματισμού σε επίπεδο τύπων.
keyof — η ένωση των κλειδιών ενός τύπου αντικειμένου
interface User { id: number; : ; }
= keyof ;
Αυτοί οι δύο τελεστές σας επιτρέπουν να εξάγετε τύπους από υπάρχοντες τύπους και τιμές — το θεμέλιο του προγραμματισμού σε επίπεδο τύπων.
interface User { id: number; : ; }
= keyof ;
const config = { host: "localhost", port: 3000 };
type Config = typeof config; // { host: string; port: number }
typeof (σε θέση τύπου) καταγράφει τον συμπεραμένο τύπο μιας τιμής στο runtime, έτσι δεν χρειάζεται να γράψετε τον τύπο ξεχωριστά.
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 extends keyof T περιορίζει το key σε πραγματικά κλειδιά, και T[K] (ένας indexed access type) επιστρέφει τον ακριβή τύπο τιμής για εκείνο το κλειδί. Τα τυπογραφικά σφάλματα γίνονται σφάλματα μεταγλώττισης.
const Roles = { Admin: "admin", User: "user" } as const;
type Role = typeof Roles[keyof typeof Roles]; // "admin" | "user"
keyof και typeof συνδέουν τον κόσμο της τιμής και τον κόσμο του τύπου.
Εμπλέκονται στην type-safe πρόσβαση ιδιοτήτων, στην εξαγωγή τύπων από ρυθμίσεις/σταθερές (μία πηγή αλήθειας), και είναι οικοδομικά στοιχεία για mapped και conditional types.
Αυτός είναι ο τρόπος για να αποφύγετε τη χειρωνακτική συντήρηση παράλληλων ορισμών τύπων.