Skip to main content

5153 - IndexOf

Answer TestCases

实现 Array.indexOf 的类型版本,indexOf<T, U> 接受一个数组 T 和任何U,并返回数组 T 中第一个 U 的索引。

例如:

type Res = IndexOf<[1, 2, 3], 2> // expected to be 1
type Res1 = IndexOf<[2, 6, 3, 8, 4, 1, 7, 3, 9], 3> // expected to be 2
type Res2 = IndexOf<[0, 0, 0], 2> // expected to be -1

Solution

type IndexOf<T extends any[], U, I extends 0[] = []> = T extends [
infer F,
...infer R
]
? Equal<F, U> extends true
? I['length']
: IndexOf<R, U, [0, ...I]>
: -1

如果 T 中存在元素, 则取出首元素 FU 对比, 类型全等, 则表示找到。直接返回遍历次数即可

若类型不相等, 则继续遍历剩余元素。