Type Alias FlattenDependencies<K, Dm, Current>

FlattenDependencies<K, Dm, Current>: Dm[K] extends (() => any)
    ? never
    : Dm[K] extends ((deps: infer Expected) => any)
        ? keyof Expected extends Current
            ? never
            : keyof Expected | FlattenDependencies<keyof Expected & keyof Dm, Dm, Current | keyof Expected & keyof Dm>
        : never

Flattens the dependency graph for the given dependency factory. E.g. given a map:

type Map = {
a: () => 1,
b: (deps: { a: number }) => 2,
c: () => 3,
d: (deps: { b: number, c: number }) => 4,
}

FlattenDependencies<'d', Map> // 'c' | 'b' | 'a'

Type Parameters

  • K extends keyof Dm
  • Dm
  • Current extends keyof Dm = never