Я использую компилятор Angular AOT версии 4.1.3.
У меня есть библиотека компонентов, которая экспортирует фабричный метод, который затем используется для предоставления услуги:
export function libServiceFactory(itemId: string) {
return (http: Http): LibService => {
return new LibService(http, itemId);
};
};
Я успешно скомпилировал библиотеку с помощью ngc
.
Затем импортируйте скомпилированную библиотеку, и я использую LibServiceFactory
в AppModule веб-сайта:
providers: [
{ provide: SERVICE_TOKEN, useFactory: libServiceFactory('foo'), deps: [Http] }
],
Я компилирую веб-сайт с помощью ng build
и получаю следующую ошибку:
ERROR in Error encountered resolving symbol values statically. Function calls are not supported. Consider replacing the function or lambda with a reference to an exported function (position 5:10 in the
original .ts file), resolving symbol libServiceFactory in C:/Projects/MyProject/code/MyWebsite/node_modules/@mylibrary/service.factory.d.ts, res
olving symbol AppModule in C:/Projects/MyProject/code/MyWebsite/src/app/app.module.ts, resolving symbol AppModule in C:/Projects/MyProject/code/MyWebsite/src/app/app.mod
ule.ts, resolving symbol AppModule in C:/Projects/MyProject/code/MyWebsite/src/app/app.module.ts
Ошибка (position 5:10 in the original .ts file)
указывает на анонимную функцию из фабричного метода: return (http: Http): LibService => {
В качестве дополнительной информации: способ, которым я создаю и использую фабричный метод, аналогичен способу, предложенному Angular в официальная документация по инъекционным токенам.
Является ли моя ошибка ожидаемым поведением? Или что-то не так в моей реализации?