Javascript 矩阵的递归类型定义

Javascript 矩阵的递归类型定义,javascript,typescript,matrix,typescript-typings,Javascript,Typescript,Matrix,Typescript Typings,我一直在努力为矩阵创建递归类型定义,但我不太明白如何通过阅读PRs来编写递归类型定义。我的想法是MatrixLiteral类型定义应接受以下值: const test1D: MatrixLiteral = [0, 2, 1]; const test2D: MatrixLiteral = [ [3, 14, 2], [6, 2, 1], ]; const test3D: MatrixLiteral = [ [ [3, 14, 2], [6, 2, 1], ],

我一直在努力为矩阵创建递归类型定义,但我不太明白如何通过阅读PRs来编写递归类型定义。我的想法是
MatrixLiteral
类型定义应接受以下值:

const test1D: MatrixLiteral = [0, 2, 1];

const test2D: MatrixLiteral = [
  [3, 14, 2],
  [6, 2, 1],
];

const test3D: MatrixLiteral = [
  [
    [3, 14, 2],
    [6, 2, 1],
  ],
  [
    [3, 14, 2],
    [6, 2, 1],
  ],
];
但我就是找不到任何类型的工作。另外,请注意,我只希望数组中有
number
类型。谢谢你抽出时间


另请注意:矩阵的秩始终大于0。(
rank>0

这可以通过一个简单的递归类型来完成:
type MatrixLiteral=number[]| MatrixLiteral[]

您可以使用以下命令强制数组不为空

type MatrixLiteral =
    | [number, ...number[]]
    | [MatrixLiteral, ...MatrixLiteral[]]

好的,我得到了
类型MatrixLiteral=[…(数字| MatrixLiteral)[]
但是有没有一种方法可以确保所有数组的元素都是
number
number[]
?您可以将该类型简化为
type MatrixLiteral=(number | MatrixLiteral)[
。这应该是你想要的;它允许哪些值是您认为不应该的?@DylanSp我希望有一种方法可以确保typescript强制规定给定的
MatrixLiteral
@DylanSp的所有最后子级中必须有数字。我也需要这样做,因为排名必须大于0。(我不希望将其设置为仅
1
或任何其他数字)因此您希望排除底层的空数组,这就是您要问的吗?提供的类型不允许字符串/布尔值等。这将允许类似于
[1、[2、[3、[4、[5]\\\\]]
的内容,这可能是可取的,也可能是不可取的。我不确定OP在这里真正想要实施什么样的约束。@jcalz-True;我在一次编辑中对其进行了更严格的限制,排除了该示例,但仍然没有强制执行长度要求。我不确定你能不能在TS的打字系统中阻止,比如说,
[[1,2],[3]]
。非常感谢!