Skip to content

Latest commit

 

History

History
51 lines (42 loc) · 1.63 KB

File metadata and controls

51 lines (42 loc) · 1.63 KB

Home > types-kit > Includes

Includes type

If V is a member of T, return true, else return false.

Signature:

export type Includes<
  T extends readonly unknown[],
  V,
  Type extends EqualTag | ExtendsTag = ExtendsTag,
> = T extends T
  ? true extends IsTuple<T>
    ? T extends readonly [infer Current, ...infer Rest]
      ? [Type] extends [EqualTag]
        ? true extends IsEquals<Current, V>
          ? true
          : Includes<Rest, V, Type>
        : true extends IsExtends<Current, V>
        ? true
        : Includes<Rest, V, Type>
      : T extends readonly [...infer Rest, infer Current]
      ? [Type] extends [EqualTag]
        ? true extends IsEquals<Current, V>
          ? true
          : Includes<Rest, V, Type>
        : true extends IsExtends<Current, V>
        ? true
        : Includes<Rest, V, Type>
      : never
    : [Type] extends [EqualTag]
    ? IsEquals<ArrayItem<T>, V>
    : IsExtends<ArrayItem<T>, V>
  : never

References: EqualTag, ExtendsTag, IsTuple, IsEquals, Includes, IsExtends, ArrayItem

Example

// Expect: true
type Foo = Includes<[1, string, boolean], number>
// Expect: false
type Bar = Includes<[1, string, boolean], number, 'equal'>