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

TypeScript DFS函数栈类型报错:number[]无法赋值给number的解决问询

问题原因及解决方案

嗨,我来帮你搞定这个TypeScript类型错误~

你遇到的报错核心是栈的类型定义和实际初始化的值完全不匹配,具体拆解如下:

为什么会报错?

你现在给stack定义的类型是:

const stack: [number[], number[], number[]] = [[src, [], [0, 0]]]

这里的[number[], number[], number[]]是一个固定长度为3的元组类型——它要求stack必须是一个刚好包含3个number[]元素的数组。但你初始化时赋值的[[src, [], [0, 0]]]是一个数组,里面的每个元素才是那个三元组,也就是它的正确类型应该是[number[], number[], number[]][](可以理解为“三元组的数组”)。

TypeScript在类型校验时,发现你试图把一个“装着三元组的数组”赋值给“三元组”类型,自然会抛出类型不兼容的错误(你看到的number[]无法赋值给number是TypeScript类型推断时的细节混淆,但根源还是类型定义错了)。

怎么解决?

只需要把stack的类型修改为元素是三元组的数组即可,有两种写法都可以:

写法1:直接在元组类型后加[]

export const DFS = (rows: number, cols: number, src: number[], dest: number[], maze: boolean[][][]) => {
  // 栈的类型:每个元素是包含三个number[]的元组,整体是数组(栈结构)
  const stack: [number[], number[], number[]][] = [[src, [], [0, 0]]]
}

写法2:用类型别名+Array泛型(可读性更好)

如果后续需要多次引用这个栈元素类型,推荐这种写法:

export const DFS = (rows: number, cols: number, src: number[], dest: number[], maze: boolean[][][]) => {
  // 先定义栈中每个元素的类型
  type StackItem = [currentPos: number[], path: number[], steps: number[]];
  // 栈就是StackItem类型的数组
  const stack: Array<StackItem> = [[src, [], [0, 0]]]
}

这样修改后,TypeScript就能正确识别stack是一个符合你需求的DFS栈结构,类型错误也就消失啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:22:45