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

为什么这段以函数为键的对象定义代码在TypeScript中无法编译?

为什么这段以函数为键的对象定义代码在TypeScript中无法编译?

先来看你提到的JavaScript代码,它确实能正常运行:

const object = {
  key: 1,
  "key key": 2,
  3: 3,
  [() => undefined]: 4,
};

console.log(Object.keys(object));

在JavaScript里,对象的键最终都会被转换为字符串类型——哪怕你用函数当键,运行时也会把这个函数的toString()结果作为实际的键名。

但到了TypeScript里,这段代码就会报错,错误信息是:

A computed property name must be of type 'string', 'number', 'symbol', or 'any'.

这是因为TypeScript作为静态类型语言,会在编译阶段就对类型做严格检查。它明确规定了对象的计算属性名必须是string、number、symbol或者any类型,而你这里用的是一个函数(类型为() => undefined),不符合TS的类型约束。

虽然JavaScript运行时会自动把函数转成字符串,但TS不会等到运行时再处理——它在编译时就会拦截这种“类型不符合预期”的写法,目的是提前避免潜在的类型问题,保证代码的类型安全性。如果你确实想用类似的写法,可以手动把函数转成字符串,比如写成[(() => undefined).toString()]: 4,这样TS就会认可这个键的类型是string,编译就能通过了。

备注:内容来源于stack exchange,提问作者Zebrafish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:04:35