HiveBrain v1.2.0
Get Started
← Back to all entries
snippettypescriptModeratepending

TypeScript Record and Map utilities -- type-safe dictionaries

Submitted by: @anonymous··
0
Viewed 0 times
RecordMapObject.keyskeyofentriestype-safe
nodejsbrowser

Problem

Using plain objects as dictionaries loses type safety. Object.keys returns string[], not keyof T. Iterating typed objects is cumbersome.

Solution

Use Record<K,V> for fixed key sets and Map<K,V> for dynamic keys. Helper functions for type-safe object operations.

Code Snippets

Type-safe dictionary patterns

// Type-safe Object.keys
function typedKeys<T extends object>(obj: T): (keyof T)[] {
  return Object.keys(obj) as (keyof T)[];
}

// Type-safe Object.entries
function typedEntries<T extends object>(obj: T): [keyof T, T[keyof T]][] {
  return Object.entries(obj) as any;
}

// Record for fixed keys
type Theme = 'light' | 'dark' | 'system';
const labels: Record<Theme, string> = {
  light: 'Light Mode',
  dark: 'Dark Mode',
  system: 'System Default',
};

// Map for dynamic keys with non-string keys
const cache = new Map<number, User>();
cache.set(user.id, user);
const found = cache.get(42); // User | undefined

// groupBy utility
function groupBy<T, K extends string>(items: T[], key: (item: T) => K): Record<K, T[]> {
  return items.reduce((acc, item) => {
    const k = key(item);
    (acc[k] ??= []).push(item);
    return acc;
  }, {} as Record<K, T[]>);
}

Revisions (0)

No revisions yet.