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

TypeScript中扁平数组转二维数组及类型声明报错解决

解决TypeScript扁平数组转二维数组的类型错误

错误原因

你遇到的Argument of type 'number' is not assignable to parameter of type 'never'错误,是因为TypeScript无法自动推断matrix的类型——初始空数组[]会被默认推断为never[][],导致后续push元素时类型不匹配。

解决方案

方案1:显式指定数组类型

直接给matrix声明明确的二维数组类型,适配你的数字数组场景:

function listToMatrix(list: number[], elementsPerSubArray: number) {
    // 显式指定matrix为number类型的二维数组
    var matrix: number[][] = [], i, k;

    for (i = 0, k = -1; i < list.length; i++) {
        if (i % elementsPerSubArray === 0) {
            k++;
            matrix[k] = [];
        }
        matrix[k].push(list[i]);
    }

    return matrix;
}

var matrix = listToMatrix([1, 2, 3, 4, 4, 5, 6, 7, 8, 9], 3);

方案2:使用泛型实现通用转换

如果需要同时支持字符串、数字等多种类型的数组转换,用泛型让函数更灵活:

// 泛型T适配任意类型的输入数组
function listToMatrix<T>(list: T[], elementsPerSubArray: number): T[][] {
    const matrix: T[][] = [];
    let k = -1;

    for (let i = 0; i < list.length; i++) {
        if (i % elementsPerSubArray === 0) {
            k++;
            matrix[k] = [];
        }
        matrix[k].push(list[i]);
    }

    return matrix;
}

// 数字数组转换示例
const numberMatrix = listToMatrix([1, 2, 3, 4, 5, 6, 7, 8, 9], 3);
// 字符串数组转换示例(对应你最初的需求)
const stringMatrix = listToMatrix(['-', '-', '-', '-', '-', '-', '-', '-', '-'], 3);

说明

显式声明类型或使用泛型后,TypeScript能明确识别数组元素的类型,push操作就不会再出现类型不兼容的错误。泛型方案还能复用函数处理不同类型的数组转换,更符合TypeScript的类型安全特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:05:05