Back to Code Bytes
2 min read
dig()

Description

The dig fn allows safe access to deeply nested properties in an object by specifying the path as a dot-delimited string. If any level of the path resolves to undefined or null, it returns the provided fallback value instead of throwing an error.

Code Byte

export const dig = <T extends object, R = any>(
  obj: T,
  path: string,
  fallback: R = undefined
): R | any => {
  return path.split('.').reduce((acc: any, key: string) => {
    return acc != null && acc[key] !== undefined
      ? acc[key]
      : fallback;
  }, obj);
}

Use cases:

  • Config reading: Safely retrieve nested config options.
  • Data parsing: Access deep values in API responses without extra checks.
  • UI rendering: Show default values when nested data is missing.
  • Utility libraries: Core helper for object navigation in generic utilities.

Example usage:

import { dig } from './dig.util';

const data = {
  user: {
    profile: {
      name: 'Alice',
      settings: { theme: 'dark' }
    }
  }
};

console.log(dig(data, 'user.profile.name'));                   // "Alice"
console.log(dig(data, 'user.profile.age', 30));                // 30 (fallback)
console.log(dig(data, 'user.address.street', 'Unknown street')); // "Unknown street"
console.log(dig(data, 'user.profile.settings.theme'));         // "dark"