You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript用string索引IRegulations报元素隐式any类型如何解决?

报错根因

你遇到的报错是因为TypeScript无法确认你传入的key字符串一定是IRegulations接口上存在的合法属性,默认不允许用任意字符串索引明确声明了结构的接口类型。

修复方案(保留原有IRegulations[]类型定义)

方案1:最小改动适配当前场景

直接将key的入参类型约束为IRegulations的属性集合即可,代码修改如下:

export const removeDublicatesFromArray = (
  array: IRegulations[],
  key: keyof IRegulations // 仅修改这一行,替换原来的string类型
) => {
  return [
    ...new Map(array.map((item: IRegulations) => [item[key], item])).values(),
  ]
}

该方案完全保留原入参类型,同时额外获得了调用时的属性名校验、自动补全能力,安全性更高。

方案2:泛型封装实现通用去重函数

如果希望这个去重函数可以适配不同类型的数组,不需要和IRegulations强绑定,可以用泛型做类型约束:

// T 约束数组项类型,K 约束为数组项的合法属性键
export const removeDublicatesFromArray = <T, K extends keyof T>(
  array: T[],
  key: K
) => {
  return [
    ...new Map(array.map((item) => [item[key], item])).values(),
  ]
}

调用时TypeScript会自动推导传入数组的类型,不需要手动指定泛型参数,原有调用removeDublicatesFromArray的代码不需要做任何修改即可正常运行。

不推荐的临时方案

如果确实需要传入IRegulations以外的字符串作为key(业务特殊场景),可以通过类型断言临时绕开校验,但会丢失类型安全保障:

// 仅做临时调试用,不建议长期保留
[item[key as keyof IRegulations], item]

内容的提问来源于stack exchange,提问作者kkkkkkkkkkkkkkkkk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:24:01