TypeScript Record Utility Type
`Record< K, T >` maps a set of keys (`K`) to values of the same type (`T`). It enhances type safety and simplifies common data structures.
Basic Record Usage
type User = {
id: number;
name: string;
};
type UserMap = Record<string, User>;
const users: UserMap = {
"u1": { id: 1, name: "Alice" },
"u2": { id: 2, name: "Bob" }
};
console.log(users.u1.name);
// Output: Alice
For example, `Record< string, User >` maps string keys to `User` objects, useful for dictionary-like structures.
Record for Enum-Like Structures
type Status = "pending" | "approved" | "rejected";
type StatusMessages = Record<Status, string>;
const messages: StatusMessages = {
pending: "Your request is being reviewed.",
approved: "Your request has been approved!",
rejected: "Your request was rejected."
};
console.log(messages.approved);
// Output: Your request has been approved!
`Record` is practical for creating fixed key-value pairs, like custom messages for different statuses.
Real-World Example: Weekly Calendar
type Day = "mon" | "tue" | "wed";
type Schedule = Record<Day, string[]>;
const mySchedule: Schedule = {
mon: ["Gym", "Meeting"],
tue: ["Coding"],
wed: ["Review", "Team Lunch"]
};
console.log(mySchedule["tue"]);
// Output: ["Coding"]
Using `Record` for user calendars improves both readability and type safety.
When to Use Record?
`Record` is essential for lookup tables, fixed mappings, translation files, and state management.
Back