类型 'Item' 的错误参数不能分配给类型为"string"的参数。TS2345



我得到错误类型'字符串'。TS2345

类型为"Item"的实参不能赋值给类型为"Item"的形参"弦"。TS2345

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(
(rt:Item)=> roomTypes.indexOf(rt) > -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;
});
}

如何用react-typescript修复这个错误?谢谢很多!

所以看起来你在使用typescript。Typescript是一种强类型语言,这意味着通常在使用变量之前必须定义它的数据类型。这也意味着您只能将变量设置为分配给它的类型。

这个错误的意思是,你试图将一个不是字符串的值赋给一个类型为"字符串"的变量。更具体地说,它看起来像是试图将整个对象(类型为"Item")分配给类型为"string"的变量。

您需要检查您的代码,并确保您没有试图在某处分配错误的数据类型。在您提供的小代码片段中,很难看出错误在哪里。

当您必须为数组回调分配类型时,例如(rt:Item) =>(act:Item) =>,这表明某些类型在链中缺失或不正确。如果数组本身具有正确的类型,则回调函数将自动获得正确的类型。

似乎错误是最有可能在你的indexOf调用,虽然很难知道没有看到你的类型为ResortResultSelectedFilters。您正在检查roomTypes是否包含元素rt,该元素是Item。如果roomTypesstring的数组,那么你需要检查roomTypes.indexOf(rt.value)而不是roomTypes.indexOf(rt)

如果它实际上是一个Item的数组,你可能会得到混乱的结果,因为indexOf正在检查严格的相等性。也就是说,它检查在两个地方是否有相同的对象实例。

这段代码通过了所有类型检查,但它可能与您的实际类型不匹配:

interface Item {
value: string;
}
interface ResortResult {
available: {roomType: string}[][];
activities: string[];
propertyCode: string;
city: string;
}
interface SelectedFilters {
room: Item[];
activity: Item[];
area: string[];
}
function 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(
(rt) => roomTypes.indexOf(rt.value) > -1
);
let hasActivity = selectedFilters["activity"].some(
(act) => ((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;
});
}

TypeScript Playground Link

你必须给一个变量分配一个不同的值,因为你不能给所有的变量分配一个字符串。

最新更新