TypeScript 类型错误 - 元素隐式具有 'any' 类型,因为 'string' 类型的表达式不能用于索引类型
TypeScript Type Error - Element implicitly has an 'any' type because expression of type 'string' can't be used to index type
我的代码出现类型错误。我不确定我错过了什么。我已经尝试了很多东西,但没有得到任何成果。
谁能帮我解决这个问题?
提前致谢
代码如下:
interface Res {
"a": {"x": number, "y": number},
"b": {"x": number, "y": number},
"c": {"x": number, "y": number}
}
interface Obj {
"a": number,
"b": number,
"c": number
}
const rule: Obj = {
"a": 10,
"b": 10,
"c": 20
}
const obj: Obj = {
"a": 100,
"b": 150,
"c": 500
}
const foo = () => {
const res: Partial<Res> = {};
for (const key in obj) {
res[key] = {
x: Math.floor(obj[key] / rule[key]),
y: obj[key] % rule[key]
};
}
return res;
}
console.log(foo());
错误:(如您所见,图像中的红线给出了错误,但代码运行正常)
使用for in,key变量得到一个字符串类型。
您不能使用字符串访问具有一组已定义属性(“a”、“b”、“c”)的对象。
要解决此问题,您可以更改 Res 和 Obj 接口以接受索引签名:
interface Res {
[key: string]: {x: number ...}
}
或者您可以将 key 的值强制转换为 Res 接受的属性集中。
res[key as keyof Res] = ...
我的代码出现类型错误。我不确定我错过了什么。我已经尝试了很多东西,但没有得到任何成果。
谁能帮我解决这个问题?
提前致谢
代码如下:
interface Res {
"a": {"x": number, "y": number},
"b": {"x": number, "y": number},
"c": {"x": number, "y": number}
}
interface Obj {
"a": number,
"b": number,
"c": number
}
const rule: Obj = {
"a": 10,
"b": 10,
"c": 20
}
const obj: Obj = {
"a": 100,
"b": 150,
"c": 500
}
const foo = () => {
const res: Partial<Res> = {};
for (const key in obj) {
res[key] = {
x: Math.floor(obj[key] / rule[key]),
y: obj[key] % rule[key]
};
}
return res;
}
console.log(foo());
错误:(如您所见,图像中的红线给出了错误,但代码运行正常)
使用for in,key变量得到一个字符串类型。 您不能使用字符串访问具有一组已定义属性(“a”、“b”、“c”)的对象。
要解决此问题,您可以更改 Res 和 Obj 接口以接受索引签名:
interface Res {
[key: string]: {x: number ...}
}
或者您可以将 key 的值强制转换为 Res 接受的属性集中。
res[key as keyof Res] = ...