reactjs - Typescript -> 在一个 React Native 项目中,‘value’ 的类型是 ‘unknown’。
我正在将一个 JS 文件转换为 TS,在我的 React Native 项目中,但遇到了一个无法解决的问题,即 value['flag'] 显示以下错误,'value' 的类型是 'unknown'.ts(18046)。对于如何解决这个问题的任何建议都将不胜感激。
代码块如下:
for (const [key, value] of Object.entries(orderedCities)) {
if (
key.startsWith(userInput.toLowerCase()) &&
userInput != '' &&
value !== typeof undefined
) {
const inputObject = {city: '', flag: ''};
inputObject.city = key;
inputObject.flag = value['flag'];
creationArray.push(inputObject);
setElementArray(creationArray);
}
}
我尝试在 const [key, value] 中声明一个类型,但这触发了一个不同的错误,我添加了 value !== typeof undefined,但是这并没有改变显示的错误。
答案#1
你期望 value 是一个具有属性 { flag: string } 的对象。目前整个 value 的类型是 unknown。甚至不知道它是否是一个 object。
这意味着你的orderedCities变量的类型有问题。也就是说,问题出在你代码的更高层次。
也许你在没有声明类型的情况下初始化了一个空字典。如果我按照以下方式创建 orderedCities,我可以重现你的 'value' 的类型为 'unknown' 错误:
const orderedCities = {};
我可以通过使用合适的类型创建 orderedCities 来消除错误:
const orderedCities: Record<string, { flag: string }> = {};
你会想要移除你尝试的解决方案 && value !== typeof undefined。这没有意义,因为 typeof undefined 是一个 string。一旦你在 orderedCities 上有了正确的类型,它本身会给你一个错误。
已更正的代码:
// Dummy variables with correct types to avoid errors
const creationArray: Array<{ city: string; flag: string }> = [];
const setElementArray: (array: Array<{ city: string; flag: string }>) => void = () => { };
const userInput = '';
// THIS IS THE TYPE WHICH MATTERS
const orderedCities: Record<string, { flag: string }> = {};
// No errors in your code
for (const [key, value] of Object.entries(orderedCities)) {
if (
key.startsWith(userInput.toLowerCase()) &&
userInput != ''
) {
const inputObject = { city: '', flag: '' };
inputObject.city = key;
inputObject.flag = value['flag'];
creationArray.push(inputObject);
setElementArray(creationArray);
}
}
TS 演示链接
答案#2
当你想遍历对象时使用 for..in。
for (const key in orderedCities) {
// const k = key as keyof typeof orderedCities
// const value = orderedCities[k]
// or
const value = orderedCities[key as keyof typeof orderedCities]
// ...
}
