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

TypeScript中动态对象键为何需调用.toString()?

为啥TypeScript会对[target.name]报错?用toString()就正常?

先看你代码里的接口定义:

interface Target {
  name: String;
  value: String;
}

核心原因:类型不匹配

TypeScript规定对象的计算属性键必须是string、number、symbol这类原始类型,或者能被推断为这些类型的表达式。但你这里的target.name是大写的String类型——这对应JavaScript里的String包装对象,不是原始的字符串类型,所以TypeScript不认它作为属性键,直接抛出错误。

为啥toString()能解决问题

String包装对象调用toString()方法后,会返回它对应的原始string值,此时计算属性键的类型完全符合TypeScript的要求,自然就不会报错了。

更省心的解决办法

其实根本问题是你误用了类型,在TypeScript里我们通常用小写的string表示字符串原始类型,修改接口定义即可:

interface Target {
  name: string;
  value: string;
}

这样直接使用[target.name]就没问题了,因为此时target.name是原始字符串类型,完全符合计算属性键的类型要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:40:39