• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

483
Views
Angular Workspace/Monorepo, forRoot me da errores. "Un valor para 'forRoot' no se puede determinar de forma estática, ya que es una declaración externa".

Tengo una biblioteca llamada Themex.

 //envInjector.ts import {InjectionToken} from "@angular/core"; export const ENVIRONMENT = new InjectionToken<{[key: string]: any}>('ENVIRONMENT');

//themex.módulo.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 } ] }; } }

La biblioteca se importa a un proyecto angular dentro del mismo espacio de trabajo angular.

 import {ThemexModule} from "themex";

Si lo estoy importando como se indicó anteriormente, aparece un error.

"Un valor para 'forRoot' no se puede determinar de forma estática, ya que es una declaración externa".

Sin embargo, si lo estoy importando como se indica a continuación, todo parece funcionar.

 import {ThemexModule} from "../../../themex/src/lib/themex.module";

Estoy usando

 Angular CLI: 12.0.5 Node: 14.16.1

Mis opciones del compilador. tsConfig.json ingrese la descripción de la imagen aquí

Todos los errores son cuando estoy haciendo un ng serve . No he probado a construir.

about 3 years ago · Santiago Trujillo
2 answers
Answer question

0

He tenido este problema los últimos días, y creo que he encontrado la solución. Para mí, ocurrió cuando estaba actualizando las dependencias de algunas de nuestras bibliotecas desde Angular 10.

Nuestra solución fue asegurarnos de que el tipo de retorno ModuleWithProviders estuviera fuertemente tipado para el módulo, así que en su caso:

 export class ThemexModule { static forRoot(config: {[key: string]: any}): ModuleWithProviders<ThemexModule> { [...] }
about 3 years ago · Santiago Trujillo Report

0

¡Correcto! Proporcionar la firma es must especialmente si / cuando la bandera Ivy está encendida, total o parcialmente.

Si no tiene forRoot() o forChild() , no necesita preocuparse por ModuleWithProviders . Si lo hace, devuelva el tipo.

Esto es para cuando la biblioteca publicable se envía a npm y otros la incorporan.

 export class SomeModuleModule { static forRoot(...): ModuleWithProviders<SomeModuleModule> {...} }
 { "angularCompilerOptions": { "enableIvy": true, "compilationMode": "partial" } }
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error