UNPKG

@nprindle/minewt

Version:

Minimal newtypes for TypeScript

12 lines (11 loc) 756 B
declare const newtypeSymbol: unique symbol; export interface Newtype<_T, N> { readonly [newtypeSymbol]: N; readonly _phantom: _T; } export declare type NewtypeRepr<N extends Newtype<unknown, unknown>> = N extends Newtype<infer T, unknown> ? T : never; export declare function newtype<N extends Newtype<unknown, unknown> = never>(): (x: NewtypeRepr<N>) => N; export declare function unwrap<N extends Newtype<unknown, unknown>>(x: N): NewtypeRepr<N>; export declare function liftN<N extends Newtype<unknown, unknown> = never>(f: (x: NewtypeRepr<N>) => NewtypeRepr<N>): (x: N) => N; export declare function liftN2<N extends Newtype<unknown, unknown> = never>(f: (x: NewtypeRepr<N>, y: NewtypeRepr<N>) => NewtypeRepr<N>): (x: N, y: N) => N; export {};