Skip to content
js
type Slice<
  A extends any[],
  S extends number = 0,
  E extends number = A['length'],
  Discard extends any[] = [],
  Result extends any[] = []
> =
  A extends [infer Head, ...infer Tail]
    ? Discard['length'] extends S
      ? Result['length'] extends E
        ? Result
        : Slice<Tail, S, E, Discard, [...Result, Head]>
      : Slice<Tail, S, E, [...Discard, Head], Result>
  : Result

利用递归和 ts 数组的特性,真是太妙了