types-kit.and.md

September 4, 2023 ยท View on GitHub

Home > types-kit > And

And type

And operator for types.

Signature:

export type And<A extends readonly unknown[]> = If<
  IsTuple<A>,
  A extends readonly [infer Current, ...infer Rest]
    ? If<
        Current,
        If<
          IsTuple<Rest>,
          And<Rest>,
          Or<[IsEmptyTypeArray<Rest>, IsTruthy<ArrayItem<Rest>>]>
        >,
        false
      >
    : A extends readonly [...infer Rest, infer Current]
    ? If<
        Current,
        If<
          IsTuple<Rest>,
          And<Rest>,
          Or<[IsEmptyTypeArray<Rest>, IsTruthy<ArrayItem<Rest>>]>
        >,
        false
      >
    : never,
  IsTruthy<ArrayItem<A>>
>

References: If, IsTuple, And, Or, IsEmptyTypeArray, IsTruthy, ArrayItem

Example

 // Expect: false
 type Foo = And<[1, 2, false]>
 // Expect: true
 type Bar = And<[true, 1, 'str']>