导出返回类的函数时出错:导出的变量具有或正在使用私有名称

时间:2016-10-14 04:34:23

标签: angular typescript

我收到了错误

  

错误TS4025:导出变量'UserApiClientModule'已经或正在使用私有名称'UserApiClient'。

在以下代码中:

export var UserApiClientModule = {
  fromConfiguration: (configuration: Configuration) => {
    @NgModule({
      providers: [
        {
          provide: BASE_PATH,
          useValue: basePath
        },
        {
          provide: Configuration,
          useValue: configuration
        },
        RegistrationApi,
        AuthApi,
        AccountApi,
        ContactsApi,
        ContactOrgsApi
      ],
      imports: [
        CommonModule,
        HttpModule
      ]
    })
    class UserApiClient { }

    return UserApiClient;
  }
}

我怀疑解决方案是以某种方式导出UserApiClient类型,但我不知道如何执行此操作,因为它是在函数中声明的。

2 个答案:

答案 0 :(得分:1)

这一点是:

  

Typescript试图猜测所有公共部分的返回类型是什么。不仅仅是猜测,而是真正宣布 UserApiClient 作为 fromConfiguration 电话的返回类型的一部分

因为我们返回了一些未导出的东西,它是内部的......有一个问题。但我们可以很容易地返回其他内容,例如一些常见的界面......或者至少是神奇的 any

// change this
export var UserApiClientModule = {
  fromConfiguration: (configuration: Configuration) => {
    @NgModule({
    ...


// to that
export var UserApiClientModule = {                // below is the change
  fromConfiguration: (configuration: Configuration) : any => {
    @NgModule({
    ...

我更愿意声明一些常见的接口IHaveDynamicData ...实际上在这里显示的类似情况How can I use/create dynamic template to compile dynamic Component with Angular 2.0?

答案 1 :(得分:0)

我不熟悉Angular 2.我是从TypeScript的角度回答你的:

问题很简单:您正在尝试从函数返回私有类。这不是正确的做法。这不是声明和导出模块和类的正确方法。

每个文件都是一个模块,您不需要明确定义它。不要使用' Module'来修改变量名称,因为变量不是模块。

在类定义之前使用export关键字,并从任何函数中取出它。类应该直接位于模块(文件)上。

export fromConfiguration: (configuration: Configuration) => {
    @NgModule({
      providers: [
        {
          provide: BASE_PATH,
          useValue: basePath
        },
        {
          provide: Configuration,
          useValue: configuration
        },
        RegistrationApi,
        AuthApi,
        AccountApi,
        ContactsApi,
        ContactOrgsApi
      ],
      imports: [
        CommonModule,
        HttpModule
      ]
    })
  }

export class UserApiClient { }