Javascript 矩阵的递归类型定义
我一直在努力为矩阵创建递归类型定义,但我不太明白如何通过阅读PRs来编写递归类型定义。我的想法是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], ],
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]]
。非常感谢!