如何从* import

时间:2018-12-19 16:59:31

标签: angular typescript import

我正在尝试(目前大多出于好奇)简化将服务导入到模块文件的过程,但我不确定是否可行。这看起来很可能,但我碰壁了。最终目标是能够在另一个文件夹中为我的服务创建桶文件,并将该文件中的所有内容导入引用该桶文件的模块中。这是我想做的一个例子:

import * as SERVICES from './services';
@NgModule({
  imports: [],
  declarations: [],
  providers: [
    ...Object.values(SERVICES)
  ]
})
export class ProjectsModule { }

它特别令人沮丧,因为记录“ Object.values(SERVICES)”显示其创建了一个服务对象数组,但是有角CLI继续抛出“仅允许Provider和Type的实例,得到了:[?null?] “。

我尝试过手动遍历SERVICES对象,而不是使用Object.values。我尝试使用映射函数从Object.values(SERVICES)返回的每个值中创建提供程序对象。

更令人沮丧的是,以下内容确实可以正常工作:

providers: [
    SERVICES.Service1,
    SERVICES.Service2,
    SERVICES.Service3
  ]

但是,这使无法在无需调整模块导入的情况下更新桶文件的观点变得毫无意义。

由于某些原因,将这些属性转换为数组会破坏某些东西。我假设我缺少有关打字稿实际上是如何导入事物的一些关键信息。我希望我尝试做的只是动态地表现如下:

import { service1, service2, service3 } from './services';

const myServices = [
        service1, 
        service2, 
        service3 
];
@NgModule({
  imports: [],
  declarations: [],
  providers: [
    ...myServices
  ]
})
export class ProjectsModule { }

编辑:根据要求,这是我自动生成的桶文件

export * from './project.resolver';
export * from './projects.resolver';
export * from './projects.service';

所有服务都是可注入的,并且未使用新的“ providedIn:'root'”语法。

1 个答案:

答案 0 :(得分:-1)

尝试一下

在您的services.ts文件中:

export const SERVICES = [
    Service1,
    Service2,
    Service3,
];

然后导入您的ProjectsModule

import { SERVICES } from './services';

@NgModule({
  imports: [],
  declarations: [],
  providers: [
    ...SERVICES
  ]
})
export class ProjectsModule { }