summaryrefslogtreecommitdiff
path: root/src/lang/ts-lang/util/utils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lang/ts-lang/util/utils.ts')
-rw-r--r--src/lang/ts-lang/util/utils.ts14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/lang/ts-lang/util/utils.ts b/src/lang/ts-lang/util/utils.ts
index ac36ca1..d6d46f7 100644
--- a/src/lang/ts-lang/util/utils.ts
+++ b/src/lang/ts-lang/util/utils.ts
@@ -6,3 +6,17 @@ export type UnarrayIfOnlyHead<T extends readonly any[]> = T extends [
: 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;