[英]Angular Workspace/Monorepo, forRoot giving me errors. "A value for 'forRoot' cannot be determined statically, as it is an external declaration."
我有一個名為 Themex 的圖書館。
//envInjector.ts
import {InjectionToken} from "@angular/core";
export const ENVIRONMENT = new InjectionToken<{[key: string]: any}>('ENVIRONMENT');
//themex.module.ts
import {ENVIRONMENT} from "./envInjector";
@NgModule({
declarations: [
ThemexComponent,
ModalComponent,
UploadComponent,
AlertComponent,
],
imports: [
CommonModule
],
exports: [
ThemexComponent,
ModalComponent,
UploadComponent,
AlertComponent,
],
providers: []
})
export class ThemexModule {
static forRoot(config: {[key: string]: any}): ModuleWithProviders<any> {
return {
ngModule: ThemexModule,
providers: [
{
provide: ENVIRONMENT,
useValue: config
}
]
};
}
}
該庫被導入到同一 angular 工作空間內的 angular 項目中。
import {ThemexModule} from "themex";
如果我按照上面給出的方式導入它,我會收到一個錯誤。
“'forRoot' 的值不能靜態確定,因為它是一個外部聲明。”
但是,如果我按照下面給出的方式導入它,一切似乎都可以正常工作。
import {ThemexModule} from "../../../themex/src/lib/themex.module";
我正在使用
Angular CLI: 12.0.5
Node: 14.16.1
所有的錯誤都是在我做ng serve
。 我沒試過構建。
最近幾天我遇到了這個問題,我想我已經找到了解決方案。 對我來說,它發生在我從 Angular 10 升級對我們某些庫的依賴項時。
我們的解決方案是確保模塊的 ModuleWithProviders 返回類型是強類型的,因此在您的情況下:
export class ThemexModule {
static forRoot(config: {[key: string]: any}): ModuleWithProviders<ThemexModule> {
[...]
}
正確的! 提供簽名是must
特別是如果/當常春藤標志開啟、完整或部分時。
如果您沒有forRoot()
或forChild()
,則無需擔心ModuleWithProviders
。 如果這樣做,則返回類型。
這是當可發布庫被推送到 npm 而其他人將其拉入時。
export class SomeModuleModule {
static forRoot(...): ModuleWithProviders<SomeModuleModule> {...}
}
{
"angularCompilerOptions": {
"enableIvy": true,
"compilationMode": "partial"
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.