Последняя ошибка Ionic 2 RC0 и Angular 2 в сборке Android (ngc: ошибка: обнаружена ошибка статического разрешения значений символов)

#android #angular #typescript #compilation #ionic2

#Android #angular #машинопись #Сборник #ionic2

Вопрос:

Ошибка появляется при сборке Android с помощью ionic build android команды

ngc: Ошибка: обнаружена ошибка статического разрешения значений символов. Ссылка на локальный (не экспортированный) словарь символов. Рассмотрите возможность экспорта символа (позиция 14: 8 в исходном файле .ts), разрешив преобразование СИМВОЛОВ_PROVIDERS

Мой код в файле translation.ts

 export const TRANSLATIONS = new OpaqueToken('translations');
// all traslations
 const dictionary : any = {
    [LANG_EN_NAME]: LANG_EN_TRANS,
    [LANG_AR_NAME]: LANG_AR_TRANS,
    [LANG_FR_NAME]: LANG_FR_TRANS
};
// providers
export const TRANSLATION_PROVIDERS : any = [
    { provide: TRANSLATIONS, useValue: dictionary},
];
  

Мой код app.module.ts

 import {TRANSLATION_PROVIDERS,TranslatePipe,TranslateService} from './translate';

@NgModule({
  declarations: [
    MyApp,
  ],
  imports: [
    BrowserModule,
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,

  ],
  providers: [TRANSLATION_PROVIDERS,TranslateService ]
})
export class AppModule {}
  

любые предложения по этой проблеме, кстати, когда я использую ionic serve command, мой проект работает на 100% с transaltion

Комментарии:

1. Можете ли вы создать минимальный репозиторий git?

Ответ №1:

Я нашел обходной путь для этого.

вам не нужно экспортировать объект словаря, просто измените ключи на статические значения.

Это сработало для меня:

 // all translations
const dictionary = {
  "en": LANG_EN_TRANS,
  "ar": LANG_AR_TRANS,
  "fr": LANG_FR_TRANS
};
// providers
export const TRANSLATION_PROVIDERS = [
  { provide: TRANSLATIONS, useValue: dictionary },
];
  

Ответ №2:

Да, именно так, как сказал @welefish в своем ответе, нет необходимости экспортировать объект словаря, вам просто нужно изменить ключи на статическое значение.

PS: — другой метод (публикация в качестве ответа, потому что метод @welefish у меня не работает)

 let en = LANG_EN_NAME;
let er = LANG_AR_NAME;
let fr = LANG_FR_NAME;

const dictionary : any = {
    en: LANG_EN_TRANS,
    er: LANG_AR_TRANS,
    fr: LANG_FR_TRANS
};

// providers
export const TRANSLATION_PROVIDERS = [
  { provide: TRANSLATIONS, useValue: dictionary },
];
  

Ответ №3:

Что ж, делайте то, что говорит компилятор :). Экспортируйте свой словарь:

 export const dictionary : any = {
    [LANG_EN_NAME]: LANG_EN_TRANS,
    [LANG_AR_NAME]: LANG_AR_TRANS,
    [LANG_FR_NAME]: LANG_FR_TRANS
};
  

Комментарии:

1. сначала спасибо за ваш ответ @PierreDuc, появляется ошибка ngc: Error: Error encountered resolving symbol values statically. Expression form not supported (position 15:5 in the original .ts file), resolving symbol dictionary in D:/Mle/.tmp/app/translate/translations.ts, resolving symbol TRANSLATION_PROVIDERS in D:/Mle/.tmp/app/translate/translations.ts, resolving symbol AppModule in D:/Mle/.tmp/app/app.module.ts, resolving symbol AppModule in D:/Mle/.tmp/app/app.module.ts

2. @OscarBout какая у вас проблема?

3. Точно так же, как @PAncho: я изменил оригинал: scotch.io/tutorials / … к вашему решению и получил ту же ошибку

Ответ №4:

Объявите тип [LANG_EN_NAME]:

 export const LANG_EN_NAME : string = 'en';
  

Сработало для меня.