Оператор распространения для объединения объектов при импорте — AOT

Я пытаюсь предоставить объект, который содержит мои ключи перевода и пример его значений:

{ 
  "try_again_key": "Try Again", 
  "cancel_key": "Cancel",
  "other_key": "Other"
  ...
} 

Я должен импортировать этот объект в свой модуль функций и предоставить его в библиотеку, чтобы я мог использовать перевод из Angular, но в моем случае мне нужно объединить 2 объекта (оба содержат разные ключи перевода) следующим образом:

import { myFallback } from "../../locale/fallback-ts";
import { otherFallback} from "@company/platform-components";

 @NgModule({
  imports: [
        TranslationsModule.forChild([
        {
            domain: "domain",
            service: "service",
            fallback: { ...otherFallback, ...myFallback },
        },
    ]),

когда я регистрирую запасной вариант на JIT = содержит 2 моих объединенных объекта

когда я регистрирую запасной вариант на AOT = пустой объект

import { myFallback } from "../../locale/fallback-ts";
import { otherFallback} from "@company/platform-components";
 @NgModule({
  imports: [
        TranslationsModule.forChild([
        {
            domain: "domain",
            service: "service",
            fallback: myFallback,
        },
    ]),

когда я регистрирую запасной вариант на JIT/AOT = содержит мой объект

но если я сделаю так, это сработает, но мне это не поможет, потому что я не буду объединять объекты, кажется, операторы распространения не поддерживаются Angular AOT

некоторые ссылки, которые я нашел об AOT: https://angular.io/guide/aot-compiler в этой ссылке не указано, что я не могу использовать с оператором распространения

эта проблема с github выглядит так, как мне нужно, но она была проигнорирована командой angular https://github.com/angular/angular-cli/issues/9511

мой вопрос, я делаю что-то не так? если это ограничение углового AOT, могу ли я объединить 2 объекта по-другому?

Что я пробовал:

используя Object.assign() вместо оператора распространения.

объявление константы, которая получает эти 2 объекта, а затем импортирует ее в мой метод .forChild()

export const fallback = { ...tsValues, ...jsonValues};


person Gustavo    schedule 29.01.2019    source источник
comment
Какова ваша фактическая ошибка от компилятора aot? Это может быть не оператор распространения, а, возможно, что-то в otherFallback. Чтобы проверить, правильно ли он компилируется, когда вы делаете fallback: otherFallback?   -  person mahi-man    schedule 29.01.2019
comment
да, я могу сделать fallback: otherfallback, на самом деле забыл сказать, ошибки нет вообще, единственное, что в AOT мой объект не определен, а в JIT — нет.   -  person Gustavo    schedule 29.01.2019


Ответы (1)


Как обсуждалось в этой проблеме, компилятор ngc, используемый в AOT, не оценивайте оператор распространения в литералах объекта при обработке метаданных по дизайну, даже если он оценивает распространение в литеральных массивах (как указано в предоставленной вами ссылке о компиляторе AOT).

Хорошо, что, по-видимому, эта проблема уже исправлена ​​на ivy (новый конвейер компиляции и рендеринга Angular), как упомянутый в конце вопроса выше.

person Bruno Rodrigues    schedule 28.01.2020