如何判断TypeScript中变量是一维/二维自定义类型数组?
解决方案
在 TypeScript 中,MyType 是编译时类型,运行时不存在,所以无法直接用 typeof 或 instanceof 判断返回值是一维还是二维数组。你可以通过自定义类型守卫实现类型推断,或者直接在条件中检查数组元素的结构。
方法一:自定义类型守卫函数
编写一个类型守卫函数,精准判断返回值是否为二维 MyType 数组:
type MyType = { id: string; name: string; } const performChunking = (arr: MyType[], CHUNK_MAX: number): MyType[] | MyType[][] => { if (!(arr.length > CHUNK_MAX)) return arr; // 实际分块逻辑示例 const chunkedArray: MyType[][] = []; for (let i = 0; i < arr.length; i += CHUNK_MAX) { chunkedArray.push(arr.slice(i, i + CHUNK_MAX)); } return chunkedArray; } // 自定义类型守卫:判断是否为二维MyType数组 function isTwoDimensionalMyTypeArray(arr: MyType[] | MyType[][]): arr is MyType[][] { // 数组非空且第一个元素是数组,即可判定为二维数组 return arr.length > 0 && Array.isArray(arr[0]); } // 示例输入数组 const someArr: MyType[] = [ { id: '1', name: 'a' }, { id: '2', name: 'b' }, { id: '3', name: 'c' }, { id: '4', name: 'd' }, { id: '5', name: 'e' }, { id: '6', name: 'f' } ]; const values = performChunking(someArr, 5); // 使用类型守卫执行分支逻辑 if (isTwoDimensionalMyTypeArray(values)) { // TypeScript 会自动推断 values 为 MyType[][] console.log('处理二维数组:', values); } else { // TypeScript 自动推断 values 为 MyType[] console.log('处理一维数组:', values); }
方法二:直接在条件中检查
如果不想额外定义函数,也可以直接在 if 条件里做判断:
if (values.length > 0 && Array.isArray(values[0])) { // 执行二维数组相关操作 } else { // 执行一维数组相关操作 }
特殊情况处理
如果原数组为空(返回一维空数组),上述判断依然有效——空数组的 length 为 0,会进入一维数组分支,符合预期逻辑。
内容的提问来源于stack exchange,提问作者physicsboy
相关产品推荐
相关产品推荐

