@nprindle/minewt
Version:
Minimal newtypes for TypeScript
12 lines (11 loc) • 756 B
TypeScript
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 {};