@develohpanda/fluent-builder
Version:
A typed, fluent builder for creating objects in Typescript
17 lines (16 loc) • 681 B
TypeScript
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 {};