以下为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