Angular2 AoT - форма выражения не поддерживается

Я пытаюсь использовать ngc для компиляции angular 2.4.4:

Error: Error encountered resolving symbol values statically. Expression form not supported (position 52:9 in the original .ts file), resolving symbol DEFAULT_APP_STATE in...

Похоже, он жалуется на то, как я экспортирую константу для @ ngrx / store.

Я попытался превратить константу в экспортированную функцию ... а также все свойства.

Ранее:

export const DEFAULT_APP_STATE = {
        Offline: DEFAULT_APP_OFFLINE_STATE,
        Initialized: DEFAULT_APP_INITIALIZED_STATE,
        Console: DEFAULT_CONSOLE_DICTIONARY,
        Identity: DEFAULT_IDENTITY,
        HamburgerState: DEFAULT_HAMBURGER_STATE,
        Customers: DEFAULT_CUSTOMER_STATE,
        UserMenuVisibility: DEFAULT_USER_MENU_VISIBILITY,
        StreamViewMultiple: DEFAULT_STREAM_VIEW_MULTIPLE_STATE,
        StreamViewSingle: DEFAULT_STREAM_VIEW_SINGLE_STATE,
        Streams: DEFAULT_STREAM_DICTIONARY,
        Destinations: DEFAULT_DESTINATION_DICTIONARY,
        DestinationList: DEFAULT_DESTINATION_LIST_STATE,
        IDestinationTranscodeModal: DEFAULT_DESTINATION_TRANSCODE_MODAL_STATE
    } as IAppState;

В настоящее время:

export function DEFAULT_APP_STATE() {
    return {
        Offline: DEFAULT_APP_OFFLINE_STATE(),
        Initialized: DEFAULT_APP_INITIALIZED_STATE(),
        Console: DEFAULT_CONSOLE_DICTIONARY(),
        Identity: DEFAULT_IDENTITY(),
        HamburgerState: DEFAULT_HAMBURGER_STATE(),
        Customers: DEFAULT_CUSTOMER_STATE(),
        UserMenuVisibility: DEFAULT_USER_MENU_VISIBILITY(),
        StreamViewMultiple: DEFAULT_STREAM_VIEW_MULTIPLE_STATE(),
        StreamViewSingle: DEFAULT_STREAM_VIEW_SINGLE_STATE(),
        Streams: DEFAULT_STREAM_DICTIONARY(),
        Destinations: DEFAULT_DESTINATION_DICTIONARY(),
        DestinationList: DEFAULT_DESTINATION_LIST_STATE(),
        IDestinationTranscodeModal: DEFAULT_DESTINATION_TRANSCODE_MODAL_STATE()
    } as IAppState;
}; 

Я использую это в моем импорте [] как таковой:

...
imports: [
    ...,
    StoreModule.provideStore({
                Offline: APP_OFFLINE_REDUCER,
                Initialized: APP_INITIALIZED_REDUCER,
                Console: CONSOLE_REDUCER,
                Identity: IDENTITY_REDUCER,
                Customers: CUSTOMER_REDUCER,
                Hamburger: HAMBURGER_REDUCER,
                UserMenuVisibility: USER_MENU_VISIBILITY_REDUCER,
                StreamViewSingle: STREAM_VIEW_SINGLE_REDUCER,
                StreamViewMultiple: STREAM_VIEW_MULTIPLE_REDUCER,
                Streams: STREAM_REDUCER,
                Destinations: DESTINATION_REDUCER,
                DestinationList: DESTINATION_LIST_REDUCER,
                DestinationTranscodeModal: DESTINATION_TRANSCODE_MODAL_REDUCER
            }, DEFAULT_APP_STATE()),
    ...
],...

Каждый редуктор уже был изменен с постоянного лямбда-объявления на экспортированную функцию.

Старый

export const reducer = () => { ...} 

новый

export function reducer() { ... }

Может ли кто-нибудь понять, на что жалуется компилятор ngc?


person josh-sachs    schedule 22.01.2017    source источник


Ответы (2)


В этом конкретном случае совместимость ngc перестала жаловаться, как только я изменил исходное объявление константы, чтобы не использовать предложение «... as IAppState».

Не сработало:

export const DEFAULT_APP_STATE = {
        Offline: DEFAULT_APP_OFFLINE_STATE,
        Initialized: DEFAULT_APP_INITIALIZED_STATE,
        Console: DEFAULT_CONSOLE_DICTIONARY,
        Identity: DEFAULT_IDENTITY,
        HamburgerState: DEFAULT_HAMBURGER_STATE,
        Customers: DEFAULT_CUSTOMER_STATE,
        UserMenuVisibility: DEFAULT_USER_MENU_VISIBILITY,
        StreamViewMultiple: DEFAULT_STREAM_VIEW_MULTIPLE_STATE,
        StreamViewSingle: DEFAULT_STREAM_VIEW_SINGLE_STATE,
        Streams: DEFAULT_STREAM_DICTIONARY,
        Destinations: DEFAULT_DESTINATION_DICTIONARY,
        DestinationList: DEFAULT_DESTINATION_LIST_STATE,
        IDestinationTranscodeModal: DEFAULT_DESTINATION_TRANSCODE_MODAL_STATE
    } as IAppState;

Работал:

export const DEFAULT_APP_STATE: IAppState = {
        Offline: DEFAULT_APP_OFFLINE_STATE,
        Initialized: DEFAULT_APP_INITIALIZED_STATE,
        Console: DEFAULT_CONSOLE_DICTIONARY,
        Identity: DEFAULT_IDENTITY,
        HamburgerState: DEFAULT_HAMBURGER_STATE,
        Customers: DEFAULT_CUSTOMER_STATE,
        UserMenuVisibility: DEFAULT_USER_MENU_VISIBILITY,
        StreamViewMultiple: DEFAULT_STREAM_VIEW_MULTIPLE_STATE,
        StreamViewSingle: DEFAULT_STREAM_VIEW_SINGLE_STATE,
        Streams: DEFAULT_STREAM_DICTIONARY,
        Destinations: DEFAULT_DESTINATION_DICTIONARY,
        DestinationList: DEFAULT_DESTINATION_LIST_STATE,
        IDestinationTranscodeModal: DEFAULT_DESTINATION_TRANSCODE_MODAL_STATE
    };
person josh-sachs    schedule 23.01.2017

AoT должен оценивать некоторый код статически, и в настоящее время он не может оценивать содержимое функции.

https://github.com/rangle/angular-2-aot-sandbox#current-status

Это может сработать

export const MY_APP_STATE = DEFAULT_APP_STATE();
imports: [
    ...,
    StoreModule.provideStore({
                Offline: APP_OFFLINE_REDUCER,
                Initialized: APP_INITIALIZED_REDUCER,
                Console: CONSOLE_REDUCER,
                Identity: IDENTITY_REDUCER,
                Customers: CUSTOMER_REDUCER,
                Hamburger: HAMBURGER_REDUCER,
                UserMenuVisibility: USER_MENU_VISIBILITY_REDUCER,
                StreamViewSingle: STREAM_VIEW_SINGLE_REDUCER,
                StreamViewMultiple: STREAM_VIEW_MULTIPLE_REDUCER,
                Streams: STREAM_REDUCER,
                Destinations: DESTINATION_REDUCER,
                DestinationList: DESTINATION_LIST_REDUCER,
                DestinationTranscodeModal: DESTINATION_TRANSCODE_MODAL_REDUCER
            }, MY_APP_STATE),
    ...
],...

Просто переместите вызовы функций и вместо этого укажите значение.

person Günter Zöchbauer    schedule 22.01.2017
comment
Думаю, ваш ответ хорош, но не решил мою конкретную проблему. - person josh-sachs; 23.01.2017