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

TS2345报错:Item类型无法分配给string类型,React+TS中如何解决?

错误原因

TS2345报错出现在roomTypes.indexOf(rt)这一行:

  • roomTypes是通过resort.available.flat().map(room => room.roomType)生成的字符串数组,indexOf方法要求传入的参数是string类型
  • 你传入的rt是Item类型,和string类型不匹配,触发类型校验失败
修复方案

参考活动筛选的写法,Item类型内置value属性存储实际匹配的字符串值,仅需要把房间筛选逻辑里的入参改为rt.value即可。

修复后代码
filter(resortList:ResortResult[], selectedFilters:SelectedFilters) {
    return resortList
      .filter(resort => {
        let roomTypes = resort.available.flat().map(room => room.roomType);
        let activities = resort.activities;
        let hasRoomType = selectedFilters["room"].some(
          // 改为取Item的value属性传入indexOf
          (rt:Item)=> roomTypes.indexOf(rt.value) > -1
        );
        let hasActivity = selectedFilters["activity"].some(
          (act:Item) => ((activities.indexOf(act.value)) > -1)
        );
        return !(
          (selectedFilters["area"].length === 0 ||
            selectedFilters["area"].indexOf(resort.city) > -1) &&
          // (selectedFilters["views"].length === 0 ||
          //   selectedFilters["views"].indexOf(resort.city) > -1) &&
          (selectedFilters["activity"].length === 0 || hasActivity) &&
          (selectedFilters["room"].length === 0 || hasRoomType)
        );
      })
      .map(resort => {
        return resort.propertyCode;
      });
  }
可选优化

可以改用Array.includes替代indexOf判断存在性,代码可读性更高:

(rt:Item)=> roomTypes.includes(rt.value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:48:04