打字稿中迭代的索引签名

Posted

技术标签:

【中文标题】打字稿中迭代的索引签名【英文标题】:Index signature for iteration in typescript 【发布时间】:2020-02-19 15:21:15 【问题描述】:

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

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

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

元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“ foo: string;酒吧:数字; baz:字符串; '。 在类型 ' foo: string; 上找不到具有类型参数的索引签名。酒吧:数字; baz:字符串; '。

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

【问题讨论】:

typescriptlang.org/play/#code/… 【参考方案1】:

尝试输入您的数组:

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

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

myArray.forEach(...)

【讨论】:

【参考方案2】:

一种解决方法是:

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

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

【讨论】:

以上是关于打字稿中迭代的索引签名的主要内容,如果未能解决你的问题,请参考以下文章

字符串枚举类似于打字稿中的类型[重复]

如何在打字稿中为 const 定义重载签名?

打字稿中的剂量[索引:字符串]是啥意思[重复]

从打字稿中的索引文件导出JSON文件

如何在打字稿中使用可能的字符串和数字索引确定对象的类型?

打字稿中的重载函数类型