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

如何声明可使用任意类型键的TypeScript记录?

用任意对象做键?用Map就对了

TypeScript里普通对象的索引签名只允许string、number或symbol类型,这是因为JavaScript底层会把对象键自动转成字符串(比如window会变成[object Window]),所以你写的{ [key: unknown]: string }会触发类型错误。

想要用任意对象作为键存储值,直接用Map就可以,它原生支持任意类型键:

const obj = new Map<unknown, string>();
obj.set(window, "Some Value");

// 用原对象就能取到对应值
console.log(obj.get(window)); // 输出 "Some Value"

为什么普通对象没法实现?

  • TypeScript严格限制了普通对象的索引类型,不允许unknown这种非原始类型作为索引签名,这是为了符合JS的实际运行机制。
  • 就算用any绕过类型检查,实际存储的键也会是对象的字符串表示,无法通过原对象精准取值,完全达不到你想要的效果。

内容的提问来源于stack exchange,提问作者Tristan F.-R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:40:01