tsminilens
Version:
mini Lens for TypeScript
38 lines (37 loc) • 2.17 kB
TypeScript
import { ChainedLensMaker, ChainedLensMakerAlias, LensMaker, LensMakerAlias } from "./lensMaker";
export declare abstract class Lens<T, TField> {
set<Tx extends T = T>(obj: Tx, val: TField): Tx;
castIf<TField1 extends TField>(predicate: (o: TField) => o is TField1): Lens<T, TField1>;
chain<TField1, TFieldComp extends TField = TField>(lens1: Lens<TFieldComp, TField1>): Lens<T, TField1>;
get then(): ChainedLensMaker<T, TField> & ChainedLensMakerAlias<T, TField>;
abstract view(obj: T): TField;
abstract over<Tx extends T = T>(obj: Tx, func: (val: TField) => TField): Tx;
}
export declare class SimpleLens<T, TField> extends Lens<T, TField> {
private fields;
constructor(fields: string[]);
view(obj: T): TField;
set<Tx extends T = T>(obj: Tx, val: TField): Tx;
over<Tx extends T = T>(obj: Tx, func: (val: TField) => TField): Tx;
}
export declare class CastLens<T, TField, TField1 extends TField> extends Lens<T, TField1> {
private inner;
private predicate;
constructor(inner: Lens<T, TField>, predicate: (o: TField) => o is TField1);
view(obj: T): TField1;
set<Tx extends T = T>(obj: Tx, val: TField1): Tx;
over<Tx extends T = T>(obj: Tx, func: (val: TField1) => TField1): Tx;
}
export declare function castIf<T, TField, TField1 extends TField>(lens: Lens<T, TField>, predicate: (o: TField) => o is TField1): Lens<T, TField1>;
export declare class ChainedLens<TRoot, TField, TField1, TFieldComp extends TField = TField> extends Lens<TRoot, TField1> {
private inner1;
private inner2;
constructor(inner1: Lens<TRoot, TField>, inner2: Lens<TFieldComp, TField1>);
view(obj: TRoot): TField1;
set<Tx extends TRoot = TRoot>(obj: Tx, val: TField1): Tx;
over<Tx extends TRoot = TRoot>(obj: Tx, func: (val: TField1) => TField1): Tx;
}
export declare function chain<T, TField, TField1, TFieldComp extends TField = TField>(lens1: Lens<T, TField>, lens2: Lens<TFieldComp, TField1>): ChainedLens<T, TField, TField1, TFieldComp>;
export declare function lensFor<T>(): LensMaker<T>;
export declare function lensFrom<T>(): LensMakerAlias<T>;
export declare function L<T>(): LensMakerAlias<T>;