-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path18142-medium-all.ts
27 lines (25 loc) · 1 KB
/
18142-medium-all.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// ============= Test Cases =============
import type { Equal, Expect } from "./test-utils";
type cases = [
Expect<Equal<All<[1, 1, 1], 1>, true>>,
Expect<Equal<All<[1, 1, 2], 1>, false>>,
Expect<Equal<All<["1", "1", "1"], "1">, true>>,
Expect<Equal<All<["1", "1", "1"], 1>, false>>,
Expect<Equal<All<[number, number, number], number>, true>>,
Expect<Equal<All<[number, number, string], number>, false>>,
Expect<Equal<All<[null, null, null], null>, true>>,
Expect<Equal<All<[[1], [1], [1]], [1]>, true>>,
Expect<Equal<All<[{}, {}, {}], {}>, true>>,
Expect<Equal<All<[never], never>, true>>,
Expect<Equal<All<[any], any>, true>>,
Expect<Equal<All<[unknown], unknown>, true>>,
Expect<Equal<All<[any], unknown>, false>>,
Expect<Equal<All<[unknown], any>, false>>,
Expect<Equal<All<[1, 1, 2], 1 | 2>, false>>
];
// ============= Your Code Here =============
type All<T, E> = T extends [infer F, ...infer R]
? Equal<F, E> extends true
? All<R, E>
: false
: true;