还在学习TypeScript,所以如果我描述得不正确,请原谅。
我有一个函数,它获取一些数据并返回一个嵌套的对象,我用forEach循环该对象。我已经为我使用的对象中的每个值声明了类型,但仍然得到一个错误:
类型""的参数(值:RaceInfo)=〉void "无法赋值给类型为""的参数(值:未知,索引:编号,数组:unknown [])=〉void "。参数" value "和" value "的类型不兼容。类型" unknown "不能赋给类型" RaceInfo "。ts(2345)
请参阅下面的代码:
interface Selection {
date: string;
time: string;
venue: string;
}
interface RaceInfo {
codes: {
race_sc: string;
};
details: {
venue: string;
};
}
export default async function getSC(selection: Selection) {
let sc;
await fetch(`URL`,{method: "GET",})
.then((response) => response.json())
.then((data) => {
if (data.success) {
Object.values(data.races).forEach((value: RaceInfo) => {
if (
value.codes.race_sc.slice(-4) === selection.time &&
value.details.venue === selection.venue
) {
sc = value.codes.race_sc;
}
});
} else {
console.log("Could not fetch the races");
}
})
.catch((error) => {
console.log("Error:", error);
});
return sc;
}
我已经找到了一种方法,通过改变实际的循环代码,这工作得很好,但这是一种可接受的编写严格TypeScript的方法吗?因为我不必为返回的对象声明类型/接口。
for (const key of Object.keys(data.races)) {
const value = data.races[key];
if (
value.codes.race_sc.slice(-4) === selection.time &&
value.details.venue === selection.venue
) {
sc = value.codes.race_sc;
}
}
1条答案
按热度按时间hyrbngr71#
value
的上下文类型为unknown
。为它指定RaceInfo
的显式类型将破坏回调的类型安全。就编译器而言,unknown
类型的任何值都可以传递到回调中。该错误阻止您将定义 * 更改a为需要RaceInfo
类型值的函数。如果您确定
Object.values(data.races)
只能是RaceInfo[]
类型,则需要使用 type assertion。