TS遍历Set向二维数组push元素报undefined错误如何解决
错误原因
你的Set遍历、条件判断逻辑本身没有语法问题,报错的核心原因是二维数组变量res仅做了类型标注,没有完成实际初始化。
在TypeScript中,let res: number[][]; 这行代码的作用只是在编译阶段告知TS编译器:res变量后续会存储数字组成的二维数组,并不会在运行时自动为你创建一个空数组实例。这行代码执行后,res的实际值是undefined,对undefined调用数组的push实例方法,就会触发你看到的类型错误。
这一点和Python的逻辑有区别:Python中变量必须显式赋值才能使用,而TS的类型标注是编译期语法,不会给变量自动赋对应类型的默认值,如果你只写类型不赋值,运行时变量就是undefined。
修复方法
声明res时直接初始化为空数组即可,修正后的代码:
let res: number[][] = []; // 初始化空数组作为初始值 for (let posElement of posSet) { const target = -1 * posElement; if (negSet.has(target)) { res.push([target, 0, posElement]); } }
小优化:把重复计算的
-1*posElement提前存为变量,减少重复运算,不优化也不影响功能运行。
注意点
- 你写的
for...of遍历Set、Set.has()做存在校验、数组推入的相关语法都是符合JS/TS标准的,不存在语法使用错误。 - 所有引用类型值(数组、对象、Set、Map等)在TS中声明时,如果要调用实例方法,一定要记得显式初始化,不要只写类型标注就直接用,类型标注不会帮你做运行时的实例创建。
内容的提问来源于stack exchange,提问作者user8814
相关产品推荐
相关产品推荐

