以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - TypeScript 类型谜题
41. implement FindIndex<T, E>
type FindIndex<T extends any[], E> = T extends [infer H, ...infer R]
? H extends E
? 0
: R extends any[]
? FindIndex<R, E> extends infer I
? I extends number
? I + 1
: never
: never
: never
: never;
type A = [any, never, 1, '2', true];
type B = FindIndex<A, 1>; // 2
type C = FindIndex<A, 3>; // never
这个FindIndex
实现使用了递归的方式,首先取出数组的第一个元素进行比较,如果匹配则返回索引0,如果不匹配则继续递归剩余的元素,如果剩余元素数组为空,则返回never
。如果递归调用返回一个数字,那么加上1作为最终索引值,否则返回never
。