Skip to content

Latest commit

 

History

History
35 lines (26 loc) · 1.35 KB

GetMiddleElement.md

File metadata and controls

35 lines (26 loc) · 1.35 KB
标题 标签
GetMiddleElement(提取数组中间元素) extends,array(继承,数组)

提取数组中间元素。

  • 如果数组的长度为 0,1,2,那么中间元素就是数组本身,如果大于 2,使用 infer 推断中间和两边的元素并递归,否则返回 never。

代码如下:

type GetMiddleElement<T extends any[]> = T['length'] extends 0 | 1 | 2
  ? T
  : T extends [infer _, ...infer M, infer _]
  ? GetMiddleElement<M>
  : never;

使用方式:

type GetMiddleElementRes1 = GetMiddleElement<[]>; // []
type GetMiddleElementRes2 = GetMiddleElement<[1, 2, 3, 4, 5]>; // [3]
type GetMiddleElementRes3 = GetMiddleElement<[1, 2, 3, 4, 5, 6]>; // [3, 4]
type GetMiddleElementRes4 = GetMiddleElement<[() => string]>; // [() => string]
type GetMiddleElementRes5 = GetMiddleElement<[() => number, '3', [3, 4], 5]>; // ['3', [3, 4]]
type GetMiddleElementRes6 = GetMiddleElement<[() => string, () => number]>; // [() => string, () => number]
type GetMiddleElementRes7 = GetMiddleElement<[never]>; // [never]

应用场景

如下所示, 鼠标悬浮到对应的类型变量可以查看类型。