如何在TypeScript对象中使用一个字段的值作为另一个字段的参数
报错原因
对象字面量处于初始化阶段时,你无法直接引用同个对象内尚未完成创建的其他属性,当前作用域不存在名为events的独立变量,因此触发TS2552未定义错误。
解决方案
方案1:提前计算events值(最推荐)
把function1(input.events)的执行结果提前存入临时变量,再分别赋值给events属性和function2入参,逻辑直观无额外性能损耗:
const processedEvents = function1(input.events); const result = { name: input.name, events: processedEvents, status: function2(processedEvents), }
方案2:使用getter访问器
如果需要把逻辑完全封装在对象内部,可以把status定义为访问器属性,访问时通过this指向已经初始化完成的对象读取events:
const result = { name: input.name, events: function1(input.events), get status() { return function2(this.events); } }
注意:该方案下每次访问result.status都会重新执行function2,如果function2是重计算逻辑会有额外性能开销,如需静态值不推荐使用。
方案3:分步赋值
先初始化带events属性的对象,再单独赋值status字段:
const result = { name: input.name, events: function1(input.events), } result.status = function2(result.events);
内容的提问来源于stack exchange,提问作者Vikrant Wagh
相关产品推荐
相关产品推荐

