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
相关产品推荐
相关产品推荐

