0.2.5 • Published 2 years ago

nested-object-access v0.2.5

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

Nested Object Access

TypeScript-powered util to work with nested objects using dot-separated keys.

Get it on NPM here

This package exports the following stuff:

Helper type: NestedKeys

Returns a union of all dot-separated paths to entries in a nested object.

type TestDict = {
  b: string;
  c: { d: number; w: string; e: { p: false } };
  t: { l: boolean; e: { q: "foo" } };
  i: { d: string | undefined; o: null };
};

// Default functionality
// "b" | "c" | "t" | "i" | "c.d" | "c.w" | "c.e.p" | "t.e.q" | "t.l" | "i.d" | "i.o" | "c.e" | "t.e"
type TestKeys = NestedKeys<TestDict>;
// Get only the paths to primitive values
// "b" | "c.d" | "c.w" | "c.e.p" | "t.e.q" | "t.l" | "i.d" | "i.o"
type TestKeysPr = NestedKeys<TestDict, "primitives">;
// Get only the paths to nested objects
// "c" | "t" | "i" | "c.e" | "t.e"
type TestKeysObj = NestedKeys<TestDict, "objects">;
// Get only up to a certain depth
// "b" | "c" | "t" | "i" | "c.d" | "c.w" | "c.e" | "t.e" | "t.l" | "i.d" | "i.o"
type TestKeysWithDepth = NestedKeys<TestDict, any, 2>;

Helper type: RetrieveNested

Returns the type that is at a dot-separated path in an object.

type TestDict2 = { c: { e: { p: "pp" } } }

// { e: { p: "pp"; }; }
type TestNestedPath1 = RetrieveNested<TestDict2, "c">;
// { p: "pp"; }
type TestNestedPath2 = RetrieveNested<TestDict2, "c.e">;
// "pp"
type TestNestedPath3 = RetrieveNested<TestDict2, "c.e.p">;

Function: getNested

Function version of RetrieveNested.

import { getNested } from "nested-object-access";
const testDict = { c: { e: { p: "pp" } } };
console.log(getNested(testDict, "c.e.p")); // "pp"

TODO

  • You can currently only pass a type Foo = {...} into the helper functions, not interface Foo {...} because of missing index signature...
0.2.5

2 years ago

0.2.3

3 years ago

0.2.4

3 years ago

0.2.2

3 years ago

0.2.1

3 years ago

0.2.0

3 years ago

0.1.1

3 years ago

0.1.0

3 years ago