2017-01-22 76 views
2

我試圖用NGC編譯角2.4.4:Angular2 AOT - 表達形式不支持

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 /商店。

我試着將常量變成導出函數......以及所有的屬性。

以前:

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()), 
    ... 
],... 

每個減速已經從一個改變對輸出函數的常量lambda聲明

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

新什麼NGC編譯器抱怨的

export function reducer() { ... } 

誰能有意義嗎?

回答

0

在這個特定的實例中,一旦我修改了原始常量聲明而不是「... as IAppState」子句,ngc compliation就會停止抱怨。

沒有工作:

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 
    }; 
0

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), 
    ... 
],... 

只是移動函數調用並引用值來代替。

+0

我認爲你的答案是好的,但並沒有解決我的特定問題。 –