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

React TypeScript中Set迭代报错:修改tsconfig后问题仍存在

问题根源与解决方案

你的错误根本不是tsconfig配置的问题,而是代码逻辑完全走偏了,同时类型处理也有问题:

原代码的问题

你在map里遍历每个exercice,取出的exercice.id是单个值(比如数字或字符串),但new Set()要求传入可迭代对象(比如数组)。你给Set传单个非可迭代值,TypeScript自然会报类型错误——这和downlevelIteration或target配置无关,就算你改了tsconfig,逻辑错误依然存在。

另外,原代码的逻辑也达不到“提取所有ID并去重”的目的:map会返回和原数组长度一致的新数组,你每个元素都返回一个只有单个ID的数组,最后得到的是二维数组,完全不是去重后的ID集合。

修正后的代码

正确的思路是先把所有ID收集到一个数组,再用Set去重:

// 1. 先收集所有ID到数组
const allExerciseIds = workoutexercices.map(exercice => exercice.id);
// 2. 用Set去重后转回数组
const uniqueMuscle = [...new Set(allExerciseIds)];

或者合并成一行更简洁:

const uniqueMuscle = [...new Set(workoutexercices.map(exercice => exercice.id))];

类型优化(避免any)

不要用any定义exercice,最好给它声明类型:

// 根据你的实际数据结构定义接口
interface WorkoutExercise {
  id: number; // 或者string,看你的ID类型
  // 其他属性比如name、muscleGroup等
}

const uniqueMuscle = [...new Set(workoutexercices.map((exercice: WorkoutExercise) => exercice.id))];

这样处理后,类型错误会自动消失,同时完美实现“提取所有ID并去重”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:57:35