我正在编写一个Angular库,我需要传入模块导入的.forRoot()
中的配置对象。
我尝试使用InjectionToken
执行此操作(显然是正确的方法),但收到AoT编译错误。
使用AoT进行编译时出错:
错误TS4050:从导出的类返回公共静态方法的类型 已经或正在使用名称' InjectionToken'来自外部模块 " /路径/到/ node_modules / @角/型芯/ SRC /二/ injection_token" 但无法命名。
感谢任何帮助。
module.ts:
import { NgModule } from '@angular/core';
import { CONFIG, Config } from './config';
@NgModule({ ... })
export class SomeModule {
static forRoot(config?: Config) {
return {
ngModule: SomeModule,
providers: [
{ provide: CONFIG, useValue: config }
]
};
}
}
config.ts:
import { InjectionToken } from '@angular/core';
export const CONFIG = new InjectionToken<Config>('config');
export interface Config {
some?: string;
values?: string;
here?: string;
}
其他应用程序所需的用法:
import { NgModule } from '@angular/core';
import { SomeModule } from 'some-library';
@NgModule({
imports: [
SomeModule.forRoot({
// <-- config values here
})
]
})
(Angular 5,TypeScript 2.6.2)
答案 0 :(得分:2)
在上面的评论中通过 JB Nizet 回答......
需要指定forRoot方法返回的类型ModuleWithProviders
。
import { NgModule } from '@angular/core';
import { CONFIG, Config } from './config';
@NgModule({ ... })
export class SomeModule {
static forRoot(config?: Config): ModuleWithProviders {
return {
ngModule: SomeModule,
providers: [
{ provide: CONFIG, useValue: config }
]
};
}
}