-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path4484-istuple.ts
35 lines (31 loc) · 914 Bytes
/
4484-istuple.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
28
29
30
31
32
33
34
35
/**
* 4484 - IsTuple
*
* Implement a type ```IsTuple```, which takes an input type ```T``` and returns whether ```T``` is tuple type.
*
* For example:
*
* ```typescript
* type case1 = IsTuple<[number]> // true
* type case2 = IsTuple<readonly [number]> // true
* type case3 = IsTuple<number[]> // false
* ```
*/
/* _____________ Your Code Here _____________ */
type IsTuple<T> = [T] extends [never]
? false
: T extends ReadonlyArray<unknown>
? number extends T['length']
? false
: true
: false
/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<IsTuple<[]>, true>>,
Expect<Equal<IsTuple<[number]>, true>>,
Expect<Equal<IsTuple<readonly [1]>, true>>,
Expect<Equal<IsTuple<{ length: 1 }>, false>>,
Expect<Equal<IsTuple<number[]>, false>>,
Expect<Equal<IsTuple<never>, false>>,
]