TypeScript报错:Duplicate identifier 'EnumMeasureTypes'及传参问题
问题解决:Duplicate identifier 'EnumMeasureTypes'
错误原因
你第2行的代码完全误用了TypeScript的枚举语法:
- 试图用
enum e {EnumMeasureTypes.TEMPERATURE,...}创建枚举值数组,但枚举的成员必须是唯一标识符,不能直接引用现有枚举EnumMeasureTypes的成员作为新枚举的成员名,这直接触发了“重复标识符”报错。 - 你的实际需求是创建
EnumMeasureTypes类型的数组,而非定义新枚举,这种写法从根源上不符合语法规则。
另外还有两个隐藏问题需要修正:
this.modulesFacade.currentHomeModules$是Observable对象,函数loadModulesMeasures需要的是实际的Module实例数组,不能直接传递Observable。- 调用
loadModulesMeasures时的参数格式错误,原代码[m,e][]的写法不符合函数要求的[Module, EnumMeasureTypes[]][]类型(即由多个[Module, 枚举数组]元组组成的数组)。
解决方案
1. 修正枚举值数组的定义
直接创建数组变量即可,甚至可以复用measures.interface.ts中已定义的MeasureTypes常量:
// 方案1:复用现成的MeasureTypes常量 const measureTypes = MeasureTypes; // 方案2:自定义需要的枚举值子集(如果不需要全部类型) const measureTypes = [ EnumMeasureTypes.TEMPERATURE, EnumMeasureTypes.HUMIDITY, EnumMeasureTypes.PRESSURE ];
2. 处理Observable获取实际Module数据
因为currentHomeModules$是Observable,需要先订阅获取其发射的Module数组,再组装成函数要求的参数格式:
// 先导入需要的类型和常量(确保路径正确) import { EnumMeasureTypes, MeasureTypes } from './measures.interface'; import { Module } from './your-module-interface-path'; import { EnumApiScales, TimeRange } from './your-api-types-path'; // 在组件逻辑中(比如ngOnInit或触发方法内) this.modulesFacade.currentHomeModules$.subscribe(modules => { // 将每个Module和measureTypes组装成元组数组 const moduleMeasureTuples = modules.map(module => [module, measureTypes] as [Module, EnumMeasureTypes[]]); // 补充scale和timeRange参数后调用函数 this.measuresFacade.loadModulesMeasures(moduleMeasureTuples, scale, timeRange); });
3. 完整修正后的代码示例
// home.component.ts import { Component, OnInit } from '@angular/core'; import { ModulesFacade } from './modules.facade'; import { MeasuresFacade } from './measures.facade'; import { EnumMeasureTypes, MeasureTypes } from './measures.interface'; import { Module } from './module.interface'; import { EnumApiScales, TimeRange } from './api.types'; @Component({ selector: 'app-home', templateUrl: './home.component.html' }) export class HomeComponent implements OnInit { constructor( private modulesFacade: ModulesFacade, private measuresFacade: MeasuresFacade ) {} ngOnInit(): void { // 示例:定义scale和timeRange参数 const scale: EnumApiScales = EnumApiScales.DAILY; const timeRange: TimeRange = { start: new Date(Date.now() - 86400000), end: new Date() }; const measureTypes = MeasureTypes; this.modulesFacade.currentHomeModules$.subscribe(modules => { const moduleMeasureTuples = modules.map(module => [module, measureTypes] as [Module, EnumMeasureTypes[]]); this.measuresFacade.loadModulesMeasures(moduleMeasureTuples, scale, timeRange); }); } }
内容的提问来源于stack exchange,提问作者Priyanka Rajendran
相关产品推荐
相关产品推荐

