You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript报错:Duplicate identifier 'EnumMeasureTypes'及传参问题

问题解决:Duplicate identifier 'EnumMeasureTypes'

错误原因

你第2行的代码完全误用了TypeScript的枚举语法:

  • 试图用enum e {EnumMeasureTypes.TEMPERATURE,...}创建枚举值数组,但枚举的成员必须是唯一标识符,不能直接引用现有枚举EnumMeasureTypes的成员作为新枚举的成员名,这直接触发了“重复标识符”报错。
  • 你的实际需求是创建EnumMeasureTypes类型的数组,而非定义新枚举,这种写法从根源上不符合语法规则。

另外还有两个隐藏问题需要修正:

  1. this.modulesFacade.currentHomeModules$是Observable对象,函数loadModulesMeasures需要的是实际的Module实例数组,不能直接传递Observable。
  2. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:45:26