UNPKG

@develohpanda/fluent-builder

Version:

A typed, fluent builder for creating objects in Typescript

17 lines (16 loc) 681 B
declare type IsOptional<T> = undefined extends T ? true : false; export declare type Schema<T> = Readonly<InternalSchema<T>>; declare type InternalSchema<T> = { [K in keyof T]-?: () => T[K]; }; declare type Mutator<T> = { [K in keyof T]-?: Mutate<T, K>; }; declare type Mutate<T, K extends keyof T> = IsOptional<T[K]> extends true ? (value?: T[K]) => FluentBuilder<T> : (value: T[K]) => FluentBuilder<T>; interface Builder<T> { reset: () => FluentBuilder<T>; build: () => T; } export declare type FluentBuilder<T> = Builder<T> & Mutator<T>; export declare const createBuilder: <T extends object>(schema: Readonly<InternalSchema<T>>) => FluentBuilder<T>; export {};