nullable-quantifier
TypeScript icon, indicating that this package has built-in type declarations

0.1.2 • Public • Published

Nullable Quantifier

npm License CI status

Existential quantifier and Universal quantifier of nullable types (like as some/every of Array.prototype)

Installation

npm install nullable-quantifier

Usage

import { some, every } from 'nullable-quantifier';

const nullableValue1: string | null | undefined = 'Hello World';
const nullableValue2: string | null | undefined = null;

some(nullableValue1, (s) => s.startsWith('Hello')); // true
some(nullableValue2, (s) => s.startsWith('Hello')); // false

every(nullableValue1, (s) => s.includes('foo')); // false
every(nullableValue2, (s) => s.includes('foo')); // true 

The some function accepts a nullable value and a predicate. If the value is null or undefined, some returns false always, otherwise some tests whether passes the provided predicate. (like as Array.prototype.some)

The every function accepts a nullable value and a predicate. If the value is null or undefined, every returns true always, otherwise every tests whether passes the provided predicate. (like as Array.prototype.every)

Signature

const some  = <A>(a: A | null | undefined, p: (_: A) => boolean): boolean
const every = <A>(a: A | null | undefined, p: (_: A) => boolean): boolean

Usecase1. validate optional values

import { every } from 'nullable-quantifier';

type UserForm = {
    name: string;
    nickname?: string;
}

function validateUserForm(form: UserForm): boolean {
    // Check that `name` is always non-empty.
    // Check that `nickname` is not empty if and only if it is specified.
    return nonEmpty(form.name) && every(form.nickname, nonEmpty);
}

const nonEmpty = (s: string): boolean => s.length > 0;

Alias

The aliases exists for some and forall for every are defined.

import { exists, forall } from 'nullable-quantifier';

const nullableValue1: string | null | undefined = 'Hello World';
const nullableValue2: string | null | undefined = null;

exists(nullableValue1, (s) => s.startsWith('Hello')); // true
exists(nullableValue2, (s) => s.startsWith('Hello')); // false

forall(nullableValue1, (s) => s.includes('foo')); // false
forall(nullableValue2, (s) => s.includes('foo')); // true 

Package Sidebar

Install

npm i nullable-quantifier

Weekly Downloads

1

Version

0.1.2

License

MIT

Unpacked Size

6.77 kB

Total Files

7

Last publish

Collaborators

  • gakuzzzz