Angular 2.0.2 - 在静态解析符号值时遇到错误

时间:2016-10-12 01:16:33

标签: javascript angular typescript

我也遇到了着名的错误"错误地遇到静态解析符号值。不支持函数调用。在运行i18n时,考虑使用对导出函数的引用替换函数或lambda,解析符号"。 我已经做了很多研究,而且我没有使用lambda函数。当我将以下import语句添加到我的基本模块时会发生这种情况:

export const mapsConfig = new LazyMapsAPILoaderConfig();
mapsConfig.apiKey = 'xyz';
// ... below is in import list
BingMapsModule.forRoot(config),

我正在使用ng2-bingmaps,我也做出了贡献:https://github.com/youjustgo/ng2-bingmaps

奇怪的是,ng2-bingmaps中的JS代码无关紧要。如果我删除所有.js文件,我仍然会得到相同的错误!所以,它必须是ng2-bingmaps core.d.ts中的内容,如下所示:

/**
 * ng2-bingmaps - Angular 2 components for Bing Maps
 * @version v0.2.0
 * @link https://github.com/youjustgo/ng2-bingmaps
 * @license MIT
 */
import { ModuleWithProviders } from '@angular/core';
import { LazyMapsAPILoaderConfig } from './services/maps-api-loader/lazy-maps-api-loader';
export * from './directives';
export * from './services';
export declare const NG2_BINGMAPS_PROVIDERS: any[];
/**
 * The ng2-bing-maps core module. Contains all Directives/Services/Pipes
 * of the core module. Please use `BingMapsModule.forRoot(config)` in your app module.
 *
 * @experimental
 */
export declare class BingMapsModule {
    static forRoot(config: LazyMapsAPILoaderConfig): ModuleWithProviders;
}

当我刚刚导入BingMapsModule(没有forRoot)时,它可以正常工作。

我检查了ng2-bingmaps中的所有提供程序,并且它们都没有在装饰器中具有lambda函数。

我的基本模块定义:

@NgModule({
  imports: [ 
    // browser module, required to load in browser
    BrowserModule, 
    // routing
    RouterModule.forRoot(routes),
    // angular forms
    FormsModule,
    // ng2-bingmaps
    BingMapsModule.forRoot(mapsConfig),
    // ng-bootstrap
    NgbModule,
    // http
    HttpModule,

    // Angulartics2
    // Angulartics2Module.forRoot(),
    // our custom modules for certain parts of our app
    CreateBookingModule,
    CommonModule
  ],
  declarations: [ 
    // all our components
   ],
  bootstrap:    [ ClientApp ],
  providers: [ 
    // our services
    ]
})

3 个答案:

答案 0 :(得分:3)

  

"在静态解析符号值时遇到错误。不支持函数调用。考虑使用对导出函数的引用替换函数或lambda,解析符号"

虽然我从未见过这个错误,但听起来好像是指这个

export const mapsConfig = new LazyMapsAPILoaderConfig();

如果mapsConfig与您正在使用的模块位于同一个文件中,则不需要导出它。我想删除export应解决错误。

另外,您可能不需要创建配置实例。由于TypeScript的结构类型系统

,您可以使用对象文字
BingMapsModule.forRoot({
  apiKey: 'xyz'
})

一般用" config"对象,无论如何你都会看到它的使用方式。

答案 1 :(得分:1)

最后我已经解决了,感谢@peeskillet的答案。

  1. 使用对象文字而不是配置对象。
  2. ng2-bingmaps不包含必需的* .metadata.json文件;每个.d.ts文件显然都需要这个。

答案 2 :(得分:0)

在使用带有Angular-cli的redux reducer时遇到类似的问题。 通过在app模块中的另一个函数中导​​出和包装函数,然后使用导出的函数来解决它:



export function returnMainReducer(){
  return {mainReducer};
}

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    CoreModule,
    SharedModule,
    StoreModule.forRoot(returnMainReducer())
  ]