TypeScriptadvanced
A fluent builder pattern typed with generics
export class QueryBuilder<Shape extends Record<string, unknown> = Record<string, never>> {
private constructor(private readonly clauses: Shape) {}
static create(): QueryBuilder<Record<string, never>> {
return new QueryBuilder({});Make each .where() call widen the builder's tracked return type by exactly the key and value just added, so build() is never underspecified.