已声明函数,能否创建对象时简化同名字段赋值避免重复书写?
解决方案
你想要的效果可以通过计算属性名结合函数的name属性来实现,这样就能避免重复书写函数名:
const myFunction = (myService: Service) => myService.doThings() const myObject = (myService: Service) => ({ [myFunction.name]: myFunction(myService) })
这里myFunction.name会自动获取函数的名称(也就是"myFunction")作为对象的属性名,属性值则是函数调用后的结果,完全满足你的需求。
为什么你的写法不生效?
你尝试的myFunction(myService)写法会被JavaScript/TypeScript解析为对象方法的定义语法,但这种语法要求提供方法的实现(比如myFunction() {}或箭头函数形式),而非直接写函数调用,因此会触发语法错误。
额外补充
如果你的函数是匿名函数(比如const myFunction = function() {}或箭头函数被重新赋值),myFunction.name可能不符合预期,这种情况下可以提前定义属性名变量:
const funcName = 'myFunction' const myFunction = (myService: Service) => myService.doThings() const myObject = (myService: Service) => ({ [funcName]: myFunction(myService) })
内容的提问来源于stack exchange,提问作者Gigabit
相关产品推荐
相关产品推荐

