Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

573
Vistas
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.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

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> { [...] }
over 4 years ago · Santiago Trujillo Denunciar

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" } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda