ERROR: Can't resolve all parameters for CustomTranslateLoader ... json import problem?

ERROR: Can't resolve all parameters for CustomTranslateLoader ... json import problem?

我正在使用 translate,我不得不编写自己的加载器,因为默认加载器是基于 httpClient 的。我的解决方案有效,项目启动并且语言发生变化。所以一切都很好。不幸的是,当我尝试构建 ng build my-lib --prod 时出现错误。我想这与 json 有关? (Angular 9).

自定义-loader.ts

import { TranslateLoader } from '@ngx-translate/core';
import { Observable, of } from 'rxjs';
import * as en from '../../../lib-assets/i18n/en.json';
import * as pl from '../../../lib-assets/i18n/pl.json';

export class CustomTranslateLoader implements TranslateLoader {
  constructor(private availableLang: any = { en, pl }) {}
  getTranslation(lang: string): Observable<any> {
    return of(this.availableLang[lang].default);
  }
}

tsconfig.json

"resolveJsonModule": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,

错误 ng build my-lib --prod:

ERROR: Can't resolve all parameters for CustomTranslateLoader in /Projects/my-app/projects/my-lib/src/lib/core/translate/custom-loader.ts: (?).

An unhandled exception occurred: Can't resolve all parameters for CustomTranslateLoader in /Projects/my-app/projects/my-lib/src/lib/core/translate/custom-loader.ts: (?).

您是否在 app.module.ts

中执行了以下代码
 TranslateModule.forRoot({
 
      loader: {
  
        provide: TranslateLoader,
  
        useClass: CustomTranslateLoader
  
  
      }
  
     })

我猜是因为这个原因: 构造函数(私有可用语言:any = { en, pl }){}

如果你想提供 availableLang = { en, pl } 那么在 OnInit() 生命周期挂钩中初始化它是一个更好的地方。 我们主要使用构造函数来进行依赖注入。尝试实施此更改。

正如 Adya 指出的那样,这是因为参数 avilableLang 的初始化。

AOT and JIT 有不同的编译规则集。所以尝试在构造函数之外初始化变量。

export class CustomTranslateLoader implements TranslateLoader {

  // original code doesn't have key in the object. you must have key in the object as shown below

  private availableLang: any = { en: en, pl: pl };          

  constructor() {}

  getTranslation(lang: string): Observable<any> {
    return of(this.availableLang[lang].default);
  }
}