InjectionToken for config不能与AoT一起使用

时间:2018-01-05 17:59:26

标签: angular typescript

我正在编写一个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)

1 个答案:

答案 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 }
            ]
        };
    }
}