打字稿中迭代的索引签名

Index signature for iteration in typescript

我们都可以看出这段代码是有效的javascript:

const myObj = {
  foo: "string",
  bar: 123,
  baz: "important stuff"
};

['foo', 'bar'].forEach((key) => {
  delete myObj[key];
});

元素隐式具有 'any' 类型,因为 'string' 类型的表达式不能用于索引类型 '{ foo: string;栏:数字; baz:字符串; }'。 在类型 '{ foo: string; 上找不到参数类型为 'string' 的索引签名栏:数字; baz:字符串; }'.

那么实现 TypeScript 兼容的最佳方式是什么?

一个解决方法是:

(['foo', 'bar'] as (keyof typeof myObj)[]).forEach((key) => {
  delete myObj[key];
});

但它不能防止数组字符串中的输入错误。

尝试输入数组:

const myObj = {
  foo: "string",
  bar: 123,
  baz: "important stuff"
};

const myArray: (keyof typeof myObj)[] = ['foo', 'bar']

myArray.forEach(...)