TypeScript运行时获取含当前变量值的Payload问题求助
解决动态替换Payload中变量的问题
问题根源
你当前的代码存在两个核心问题:
_myPayload使用单引号包裹,是普通字符串,里面的${valueThatChanges}只是纯文本,不会被当作模板变量解析;payload的 getter 直接返回原始字符串,没有在每次获取时执行变量替换逻辑,导致占位符始终无法被当前的valueThatChanges值替换。
解决方案
下面提供两种实用的实现方式,按需选择:
方式一:字符串替换(简单直接)
把 _myPayload 存为带占位符的普通字符串,在 getter 中动态替换占位符:
private _myPayloadTemplate = `{ "rowCounts": { "rowStart": 1, "rowLimit": 5 }, "criteria": "${valueThatChanges}" }`; private valueThatChanges: number; get payload(): string { // 每次获取时替换占位符为当前值 return this._myPayloadTemplate.replace('${valueThatChanges}', this.valueThatChanges.toString()); } // 若无需修改模板,可删除setter;若需自定义模板,保留setter用于更新模板 set payload(template: string) { this._myPayloadTemplate = template; }
方式二:JSON对象动态生成(更安全)
避免手动拼接字符串的格式错误,直接用对象转JSON的方式生成Payload:
private valueThatChanges: number; get payload(): string { // 每次调用getter时,用当前valueThatChanges生成完整JSON return JSON.stringify({ rowCounts: { rowStart: 1, rowLimit: 5 }, criteria: this.valueThatChanges }); }
测试代码修正
原测试代码中的await是多余的(payload为同步属性),修正后使用:
this.valueThatChanges = 111; log.info('payload1:' + this.payload); // 输出包含111的JSON this.valueThatChanges = 333; log.info('payload2:' + this.payload); // 输出包含333的JSON
扩展说明
如果需要criteria是对象类型(比如"criteria": {"target": 111}),只需调整生成逻辑,例如在方式二中修改:
get payload(): string { return JSON.stringify({ rowCounts: { rowStart: 1, rowLimit: 5 }, criteria: { target: this.valueThatChanges } }); }
内容的提问来源于stack exchange,提问作者EdXX
相关产品推荐
相关产品推荐

