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] = ...