如何基于计算逻辑为Typescript Interface的对应月份属性赋值
解决方案
你需要用方括号动态属性访问语法配合TS类型断言实现赋值,同时建议先加边界校验避免给不存在的属性赋值,完整实现代码如下:
functionToSetMonthData(currentDate:String,futureDate: String, projection: FutureProjection, amount: number): FutureProjection{ const monthNum = calculateMonthNum(currentDate,futureDate); // 校验月份范围合法性 if (monthNum < 1 || monthNum > 12) { throw new RangeError(`计算得到的月份差值${monthNum}超出1-12的合法范围`); } // 构造动态属性名,通过类型断言告知TS该属性属于FutureProjection的合法键 const targetKey = `month${monthNum}` as keyof FutureProjection; projection[targetKey] = amount; return projection; }
原理解释
- JS/TS中访问动态属性不能用点运算符直接拼接字符串,必须用
对象[动态属性名]的方括号语法 - 因为
FutureProjection是固定键的TS接口,直接传入模板字符串month${monthNum}时TS无法识别它是合法属性键,需要用as keyof FutureProjection做类型断言保证类型校验通过 - 增加范围校验可以避免逻辑异常时给不存在的属性赋值,保证对象结构始终符合接口定义
内容的提问来源于stack exchange,提问作者RV.
相关产品推荐
相关产品推荐

