fluent-object-builder
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

fluent-object-builder

This package provides a strongly typed, purely functional object builder with a fluent interface.

Install

# With NPM
npm install --save fluent-object-builder

# With yarn
yarn add fluent-object-builder

Usage

The library exports a single method builder() to create a builder. If you pass no type argument, the builder is unconstrained, i.e. you can pass any property. If you you do pass a type argument T, the builder is constrained to properties and values of T and the build method will only be available once all properties are set.

import builder from 'fluent-object-builder';

// Constrained builder

interface MyType {
  s: string;
  n: number;
  b?: boolean;
}

const obj = builder<MyType>().s('abc').n(0).b(false).build();

// TypeError, because n is not set
const obj2 = builder<MyType>().s('abc').b(true).build();

// No TypeError, because b is optional
const obj3 = builder<MyType>().s('abc').n(0).build();

// You can also use the get, set and unset methods instead of the fluent interface
const builder4 = builder<MyType>().set('n', 0);
const obj4 = builder4.set('s', builder.get('n').toString()).unset('n').set('n', 1).build();

// Unconstrained builder

const obj4 = builder().set('x', 1).set('y', 2).build();
// Object type is Record<'x', number> & Record<'y', number>

// When using an unconstrained builder with the fluent interface, you need to
// specify the key and value type using the type arguments for the TypeScript
// compiler to correctly identify the types
const builder5 = builder().x<'x', 1>('x', 1);
// Afterwards, you don't need to use the type arguments again
const obj5 = builder5.set('y', builder5.get('x') + 1).build();

License

MIT

Readme

Keywords

none

Package Sidebar

Install

npm i fluent-object-builder

Weekly Downloads

2

Version

1.0.1

License

MIT

Unpacked Size

9.46 kB

Total Files

8

Last publish

Collaborators

  • gfmio