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

TypeScript中省略键名冒号的合法性及对象后[name]的含义

问题解答

1. 为什么TypeScript允许省略动态键后的冒号?

这不是TypeScript专属的特殊规则,ES6(ES2015)之后的标准JavaScript就已经支持动态属性名的方法简写语法。

在对象中定义方法时,不管属性名是静态固定的还是动态计算的,都可以用简写形式:

  • 静态键的简写:{ fn() {} } 和 { fn: function() {} } 完全等价
  • 动态键的简写:{ [key]() {} } 等价于 { [key]: function() {} }

你给出的TS代码里,[name](...args: any[]) { ... }就是动态键的方法简写,本质和你第一个JS例子里的[key]: ()=>{...}逻辑一致,只是把箭头函数换成了普通函数的简写形式,所以可以省略冒号,这是JS/TS通用的标准语法,并非TS额外新增的特性。

2. 对象闭合大括号后的[name]是什么含义?

这段代码先创建了一个临时对象,这个对象里只有一个属性:属性名是name变量的具体值,属性值就是我们定义的那个函数。

而[name]是属性访问操作,意思是从这个临时对象里,取出属性名与name变量值完全匹配的那个属性(也就是刚定义的函数),最终把这个函数作为nameFunction的返回值。

举个实际调用的例子:如果执行nameFunction('sayHi', () => console.log('hi')),临时对象会是{ sayHi: function(...args) { return body(...args) } },[name]就会取出这个对象的sayHi属性(也就是目标函数)并返回。这么做的核心目的是让返回函数的name属性等于传入的name参数(直接定义的函数name是自身标识符,而通过动态属性绑定的函数,name会被设置为对应的属性名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:12:36