Skip to content

Latest commit

 

History

History
36 lines (27 loc) · 1.31 KB

Transpose.md

File metadata and controls

36 lines (27 loc) · 1.31 KB
标题 标签
Transpose(矩阵转换) extends,infer(继承,推断)

矩阵转换。

  • 创建一个数组参数 R,如果第一个数组参数 T 的长度不为 0,则返回第一项,否则返回空数组。
  • 从 R 中取出索引值并从 T 中也取出索引值,如果 X 和T[Y]相同,则返回T[Y][X],否则返回 never。

代码如下:

type Transpose<T extends number[][], R = T['length'] extends 0 ? [] : T[0]> = {
  [X in keyof R]: {
    [Y in keyof T]: X extends keyof T[Y] ? T[Y][X] : never;
  };
};

使用方式:

type TransposeRes1 = Transpose<[]>; // []
type TransposeRes2 = Transpose<[[1]]>; // [[1]]
type TransposeRes3 = Transpose<[[1, 2]]>; // [[1], [2]]
type TransposeRes4 = Transpose<[[1, 2], [3, 4]]>; // [[1, 3], [2, 4]]
type TransposeRes5 = Transpose<[[1, 2, 3], [4, 5, 6]]>; // [[1, 4], [2, 5], [3, 6]]
type TransposeRes6 = Transpose<[[1, 4], [2, 5], [3, 6]]>; // [[1, 2, 3], [4, 5, 6]]
type TransposeRes7 = Transpose<[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>; // [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

应用场景

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