我写了一个javascript函数。然后我把它转换成typescript。当我转换我得到3个错误。我不能做这个修复。请任何人帮助我。
const countryData = [
{
id: 1,
name: 'Afghanistan',
isoAlpha2: 'AF',
isoAlpha3: 'AFG',
isoNumeric: 4,
currency: {
code: 'AFN',
name: 'Afghani',
symbol: '؋'
},
flag: "flasg",
callingCodes: ['+93'],
languages: ['pus'],
emoji: '🇦🇫'
},
{
id: 2,
name: 'Albania',
isoAlpha2: 'AL',
isoAlpha3: 'ALB',
isoNumeric: 8,
currency: {
code: 'ALL',
name: 'Lek',
symbol: 'L'
},
flag: "flasg",
callingCodes: ['+355'],
languages: ['sqi'],
emoji: '🇦🇱'
}
]
export interface CountryDataTypes {
id: number;
name: string;
isoAlpha2: string;
isoAlpha3: string;
isoNumeric: number;
currency: {
code: string;
name: string;
symbol: string | boolean;
}
flag: string;
callingCodes: string[];
languages: string[];
emoji: string;
}
interface Props {
name?: string;
countryCode?: string;
callingCode?: string;
currencyName?: string;
currencyCode?: string;
currencySymbol?: string;
isoNumeric?: number;
}
export function lookup(data: Props): CountryDataTypes {
const fields = Object.entries(data)
const result = countryData.find((d) => { // Error 1
for (var key in fields) {
return d[fields[key][0]] === fields[key][1] //Error 2
}
})
return result as CountryDataTypes || {} as CountryDataTypes;
}
这里是实时链接-点击这里
这里我写了一个过滤国家数据的函数。它在javascript中工作的很好。但是当我把它转换成typescript时,它给了我错误。
//其他-错误1-
并非所有代码路径都返回值。
错误2-
元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型“{ id:编号;名称:字符串; isoAlpha 2:字符串; isoAlpha 3:字符串; isoNumeric:号码;货币:{ code:字符串;名称:字符串;符号:字符串;};标志:字符串;呼叫代码:字符串[];语言:字符串[];表情符号:字符串;}“。
未在类型“{ id:编号;名称:字符串; isoAlpha 2:字符串; isoAlpha 3:字符串; isoNumeric:号码;货币:{ code:字符串;名称:字符串;符号:字符串;};标志:字符串;呼叫代码:字符串[];语言:字符串[];表情符号:字符串;}“。
1条答案
按热度按时间5tmbdcev1#
错误1是因为
fields
可能是空的,因此for循环将永远不会循环,因此您的箭头函数将永远不会返回任何东西。只需在for循环后添加一个return语句,以返回一些默认值或抛出一个错误。错误2是因为
fields[key][0]
的类型是string
,你不能使用任意的string
值来索引d
,但是只有字符串匹配d
的属性名之一。如果你确定fields[key][0]
是d
的有效属性名,你可以进行强制转换来告诉编译器:d[fields[key][0] as keyof(typeof d)]
。(但我不认为在您的场景中是这种情况,我怀疑您在这里有逻辑错误)。for循环可以简化为:
逻辑上
key
应该是'name' | 'countryCode' | 'callingCode' | 'currencyName' | 'currencyCode' | 'currencySymbol' | 'isoNumeric'
。使用这些值来索引d
没有多大意义,因为只有name
在d
上可用。因此key
的类型不是keyof(typeof d)
,我们在对编译器撒谎。