You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用TypeScript定义各层元素长度一致的多维矩阵嵌套数组

定义每层元素长度一致的TypeScript多维矩阵类型

要实现每层所有子数组长度严格一致的多维矩阵类型,我们可以基于你提供的FixedArray固定长度数组类型,通过递归泛型来约束每一层的维度:

// 固定长度数组类型,强制数组长度等于指定的D
type FixedArray<T, D extends number> = T[] & { length: D };

// 多维矩阵类型,Dims元组依次指定每一层的数组长度
type Matrix<T, Dims extends number[]> = 
  // 递归终止条件:维度元组为空时,返回元素本身类型
  Dims extends [] 
    ? T 
    // 拆解维度元组,当前层长度为First,剩余维度为Rest
    : Dims extends [infer First extends number, ...infer Rest extends number[]]
      ? FixedArray<Matrix<T, Rest>, First>
      : never;

用法示例

  • 一维数组(长度为5的数字数组)

    type OneD = Matrix<number, [5]>;
    const arr1d: OneD = [1, 2, 3, 4, 5]; // 合法
    // const badArr1d: OneD = [1,2,3]; // 报错:长度不匹配
    
  • 二维矩阵(3行4列)

    type TwoD = Matrix<number, [3, 4]>;
    const matrix2d: TwoD = [
      [1,2,3,4],
      [5,6,7,8],
      [9,10,11,12]
    ]; // 合法
    // const badMatrix2d: TwoD = [[1,2], [3,4], [5,6]]; // 报错:子数组长度不匹配
    
  • 三维矩阵(2×3×4)

    type ThreeD = Matrix<number, [2, 3, 4]>;
    const matrix3d: ThreeD = [
      [[1,2,3,4], [5,6,7,8], [9,10,11,12]],
      [[13,14,15,16], [17,18,19,20], [21,22,23,24]]
    ]; // 合法
    

原理说明

  • FixedArray通过交叉类型将普通数组与带有固定length属性的对象合并,让TypeScript强制校验数组长度是否符合指定值。
  • Matrix类型采用递归逻辑:每次从维度元组Dims中取出第一个长度值,用FixedArray约束当前层的数组长度,同时递归处理剩余的维度,确保每一层的所有子数组都遵循相同的长度规则。
  • 注意:Dims必须是数字字面量组成的元组(比如[3,4]),不能是number[]类型,否则TypeScript无法推断具体的长度约束。

内容的提问来源于stack exchange,提问作者NovaAstra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:57:32