Skip to content

dfdlT

  • dfdlT(fn, arity?: boolean)
  • dfdlT(fn, isDataFirst: (args: IArguments) => boolean)

Same as dfdl but allows explicit type definitions, which is in particularly useful if you want to use generics or additional overloads:

ts
import { dfdlT } from "@monstermann/dfdl";

const map = dfdlT<
    <T, U>(fn: (item: T) => U) => (arr: T[]) => U[],
    <T, U>(arr: T[], fn: (item: T) => U) => U[]
>((arr, fn) => arr.map(fn));
ts
import { dfdlT } from "@monstermann/dfdl";

const map: {
    <T, U>(fn: (item: T) => U): (arr: T[]) => U[];
    <T, U>(arr: T[], fn: (item: T) => U): U[];
} = dfdlT(<T, U>(arr: T[], fn: (item: T) => U): U[] => arr.map(fn));
ts
map([1, 2, 3], (x) => x * 2); // [2, 4, 6]
ts
map((x) => x * 2)([1, 2, 3]); // [2, 4, 6]

pipe(
    [1, 2, 3],
    map((x) => x * 2),
); // [2, 4, 6]

TIP

Typically when defining your functions in this case, you should experience better type inference when using NoInfer:

ts
const map = dfdlT<
    <T, U>(fn: (item: NoInfer<T>) => U) => (arr: T[]) => U[],
    <T, U>(arr: T[], fn: (item: NoInfer<T>) => U) => U[]
>((arr, fn) => arr.map(fn));