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
相关产品推荐
相关产品推荐

