Skip to content

Product

3 exports Added in v0.24.0 Source

Other

struct

Added in v0.24.0 Source

Signature

declare function struct<F extends TypeLambda>(
  F: Product<F>,
): <
  R extends {
    [x: string]: Kind<F, any, any, any, any>;
  },
>(
  fields: R,
) => Kind<
  F,
  [R[keyof R]] extends [Kind<F, R, any, any, any>] ? R : never,
  R[keyof R] extends never ? never : [R[keyof R]] extends [Kind<F, any, O, any, any>] ? O : never,
  R[keyof R] extends never ? never : [R[keyof R]] extends [Kind<F, any, any, E, any>] ? E : never,
  { [K in string | number | symbol]: [R[K]] extends [Kind<F, any, any, any, A>] ? A : never }
>;

tuple

Added in v0.24.0 Source

Signature

declare function tuple<F extends TypeLambda>(F: Product<F>): <T extends readonly Array<Kind<F, any, any, any, any>>>(...elements: T) => Kind<F, [T[number]] extends [Kind<F, R, any, any, any>] ? R : never, T[number] extends never ? never : [T[number]] extends [Kind<F, any, O, any, any>] ? O : never, T[number] extends never ? never : [T[number]] extends [Kind<F, any, any, E, any>] ? E : never, { [I in string | number | symbol]: [T[I]] extends [Kind<F, any, any, any, A>] ? A : never }>

Type Class

Product interface

Added in v0.24.0 Source

Signature

interface Product<F extends TypeLambda> extends SemiProduct<F>, Of<F> {
  readonly productAll: <R, O, E, A>(
    collection: Iterable<Kind<F, R, O, E, A>>,
  ) => Kind<F, R, O, E, Array<A>>;
}