@monstermann/fn
Version:
A utility library for TypeScript.
35 lines (34 loc) • 952 B
TypeScript
import { UnknownArray } from "type-fest";
//#region src/object/evolve.d.ts
type Evolver<T> = T extends object ? T extends UnknownArray ? never : { readonly [K in keyof T]?: K extends symbol ? never : Evolver<T[K]> | ((data: Required<T>[K]) => T[K]) } : never;
/**
* `evolve(target, props)`
*
* Creates a new object with multiple properties transformed by their corresponding functions in the `props` object.
*
* ```ts
* evolve(
* { a: 1, b: 2, c: 3 },
* {
* a: (x) => x * 2,
* c: (x) => x + 1,
* },
* ); // { a: 2, b: 2, c: 4 }
* ```
*
* ```ts
* pipe(
* { a: 1, b: 2, c: 3 },
* evolve({
* a: (x) => x * 2,
* c: (x) => x + 1,
* }),
* ); // { a: 2, b: 2, c: 4 }
* ```
*/
declare const evolve: {
<T extends object, U extends Evolver<T>>(evolver: U): (target: T) => T;
<T extends object, U extends Evolver<T>>(target: T, evolver: U): T;
};
//#endregion
export { evolve };