Welcome back! I am Mihir, and in this lesson we will learn the Record utility type in TypeScript.
Record<K, T> creates an object type where keys are K and values are T.
Basic Record Example
type Scores = Record<string, number>;
const scores: Scores = {
mihir: 95,
alex: 88,
};This means every string key has a number value.
Fixed Keys with Record
type Role = "admin" | "editor" | "viewer";
type RolePermissions = Record<Role, string[]>;Usage:
const permissions: RolePermissions = {
admin: ["create", "read", "update", "delete"],
editor: ["read", "update"],
viewer: ["read"],
};All roles must be present.
Missing Keys Cause Errors
Invalid:
const permissions: RolePermissions = {
admin: ["create"],
editor: ["read"],
};viewer is missing.
Value Types Are Checked
Invalid:
const permissions: RolePermissions = {
admin: "all",
editor: ["read"],
viewer: ["read"],
};Each value must be string[].
Record for Lookup Objects
type Status = "success" | "error" | "loading";
const statusLabels: Record<Status, string> = {
success: "Success",
error: "Something went wrong",
loading: "Loading...",
};This is cleaner than a long chain of if statements for simple lookup values.
Record vs Index Signature
Index signature:
type Scores = {
[name: string]: number;
};Record:
type Scores = Record<string, number>;They are similar for simple dictionaries. Record is shorter and works nicely with unions of fixed keys.
Quick Recap
Record<K, T>creates an object map.Kis the key type.Tis the value type.- It is useful for dictionaries and lookup objects.
- With union keys, Record requires every key to exist.
Next up, we will learn Exclude and Extract →.