TypeScript多级键映射结构优化:实现直接层级访问
修改TypeScript对象结构实现层级访问
你当前定义的dependencyMetrics对象中,每个服务(比如MyService)对应的值是一个包含MetricInfo映射的数组,导致无法直接通过dependencyMetrics.MyService.failure或dependencyMetrics.MyService.time的方式访问目标值,必须先索引数组元素(如dependencyMetrics.MyService[0].failure)。要实现层级映射式访问,只需调整类型定义和对象结构,去掉数组包裹即可。
修改方案
1. 调整类型定义
将原类型中服务对应值的数组类型{[name: string]: MetricInfo}[]改为直接的对象类型{[name: string]: MetricInfo},新的类型定义如下:
type DependencyMetrics = { [dependencyName: string]: { [name: string]: MetricInfo; }; };
2. 修改对象字面量
去掉MyService对应值的外层数组括号([]),让服务直接映射到包含failure、time等MetricInfo的对象。
修改后的完整代码
type MetricInfo = { metric: Metric; metricProperties: MetricOptions; }; type DependencyMetrics = { [dependencyName: string]: { [name: string]: MetricInfo; }; }; const dependencyMetrics: DependencyMetrics = { MyService: { failure: { metric: new Metric({ namespace: 'namespace', metricName: 'ABC' }), metricProperties: { period: Duration.seconds(60), statistic: 'Average' } }, time: { metric: new Metric({ namespace: 'namespace', metricName: 'age' }), metricProperties: { period: Duration.seconds(60), statistic: 'Average' } } } };
效果验证
修改完成后,你就可以直接通过以下方式访问目标值:
// 直接访问failure指标 dependencyMetrics.MyService.failure; // 直接访问time指标 dependencyMetrics.MyService.time;
内容的提问来源于stack exchange,提问作者SAIKAT CHAKRABORTY
相关产品推荐
相关产品推荐

