summaryrefslogtreecommitdiff
path: root/src/lang/ts-lang/util/utils.ts
blob: d6d46f7e8d0c3e55919c249e4346f1509883e6bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
export type UnarrayIfOnlyHead<T extends readonly any[]> = T extends [
  infer Head,
  infer Next
]
  ? T
  : T extends [infer Head]
  ? Head
  : T;

type ARR_EQUAL_SENTINEL = { __arrEq: true };
export type ArrayEqual<
  T extends readonly any[],
  Last = ARR_EQUAL_SENTINEL
> = T extends [infer Head, ...infer Tail]
  ? Last extends ARR_EQUAL_SENTINEL
    ? ArrayEqual<Tail, Head>
    : Head extends Last
    ? Last extends Head
      ? ArrayEqual<Tail, Head>
      : false
    : false
  : true;