在构造角度6库时为导出的符号生成的元数据中遇到错误

时间:2018-05-07 21:54:48

标签: angular angular-cli angular-library angular-cli-v6

从我的库中执行'ng build'时出现以下错误。

我目前正在使用Angular 6,但我认为此错误与版本无关。

  

/home/rafaelvicio/desenv/my-lib/arquitetura-web/projects/pf-siseg/src/lib/keycloak-service/keycloak.service.ts:13:1:   为导出的符号生成的元数据遇到错误   'KeycloakService':
  /home/rafaelvicio/desenv/my-lib/arquitetura-web/projects/pf-siseg/src/lib/keycloak-service/keycloak.service.ts:18:12:   收集的元数据包含将在运行时报告的错误:   只能初始化变量和常量,因为   模板编译器需要此变量的值   {“_ _ symbolic”:“错误”,“消息”:“变量不是   初始化“,”行“:17,”字符“:11}错误:   /home/rafaelvicio/desenv/my-lib/arquitetura-web/projects/pf-siseg/src/lib/keycloak-service/keycloak.service.ts:13:1:   为导出的符号生成的元数据遇到错误   'KeycloakService':
  /home/rafaelvicio/desenv/my-lib/arquitetura-web/projects/pf-siseg/src/lib/keycloak-service/keycloak.service.ts:18:12:   收集的元数据包含将在运行时报告的错误:   只能初始化变量和常量,因为   模板编译器需要此变量的值   {“_ _ symbolic”:“错误”,“消息”:“变量不是   初始化”, “线”:17, “字符”:11}       at /home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/metadata/collector.js:707:31       在Array.forEach()       在validateMetadata上(/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/metadata/collector.js:695:46)       在MetadataCollector.getMetadata(/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/metadata/collector.js:550:21)       在MetadataCache.getMetadata(/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/transformers/metadata_cache.js:86:41)       at Object.getSourceFileMetadata(/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/transformers/compiler_host.js:112:56)       at Object.readMetadata(/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/transformers/metadata_reader.js:46:37)       在TsCompilerAotCompilerTypeCheckHostAdapter.getMetadataFor(/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler-cli/src/transformers/compiler_host.js:464:38)       在StaticSymbolResolver.getModuleMetadata(/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler/src/aot/static_symbol_resolver.js:480:49)       在StaticSymbolResolver._createSymbolsOf(/home/rafaelvicio/desenv/my-lib/arquitetura-web/node_modules/@angular/compiler/src/aot/static_symbol_resolver.js:268:33)

keycloak.service.ts:

import { Injectable } from '@angular/core';
import { KeycloakLoginOptions } from './keycloak.d';

import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';

import * as Keycloak from './keycloak';

export type KeycloakClient = Keycloak.KeycloakInstance;
type InitOptions = Keycloak.KeycloakInitOptions;

@Injectable()
export class KeycloakService {

    constructor(private http: HttpClient) { }

    static keycloakAuth: KeycloakClient;

.... More code here

4 个答案:

答案 0 :(得分:6)

在声明静态方法的类之前添加// @dynamic

答案 1 :(得分:1)

我正在使用Angular V8,并且遇到了同样的问题。 Angular不允许不初始化静态变量。解决方案是使用null初始化以避免错误。

@Injectable()
export class ExampleService {

    static URL: string = null;
...

答案 2 :(得分:0)

我遇到了同样的问题,并通过从变量中删除“静态”来解决了该问题。

答案 3 :(得分:0)

我今天在util类中遇到了此问题,该类提供静态方法作为助手。

我通过将this替换为ObjectUtils(类名本身)解决了该问题,并且可以使用。

就像@NicolasThierion在他的reply中提到的@ stack247一样,您也可以尝试以下破解方法

// @dynamic
export class SomeClass {
    public static get() { return 'someValue'; } 
}