Ошибка при экспорте функции, возвращающей класс: Экспортированная переменная имеет или использует личное имя
Я получаю сообщение об ошибке
ошибка TS4025: экспортированная переменная 'UserApiClientModule' имеет или использует личное имя 'UserApiClient'.
в следующем коде:
export var UserApiClientModule = {
fromConfiguration: (configuration: Configuration) => {
@NgModule({
providers: [
{
provide: BASE_PATH,
useValue: basePath
},
{
provide: Configuration,
useValue: configuration
},
RegistrationApi,
AuthApi,
AccountApi,
ContactsApi,
ContactOrgsApi
],
imports: [
CommonModule,
HttpModule
]
})
class UserApiClient { }
return UserApiClient;
}
}
Я подозреваю, что решение заключается в том, чтобы каким-то образом экспортировать тип UserApiClient, но я не уверен, как это сделать, поскольку он объявлен в функции.
Ответы
Ответ 1
Пункт здесь:
Typescript пытается угадать, что такое возвращенный тип всех общедоступных частей. И не только догадаться, но и действительно объявить UserApiClient
как часть возвращаемого типа вызова fromConfiguration
И поскольку мы возвращаем что-то, что не экспортируется, является внутренним.. есть проблема. Но мы можем легко вернуть что-то еще, например. некоторый общий интерфейс... или по крайней мере магический any
// change this
export var UserApiClientModule = {
fromConfiguration: (configuration: Configuration) => {
@NgModule({
...
// to that
export var UserApiClientModule = { // below is the change
fromConfiguration: (configuration: Configuration) : any => {
@NgModule({
...
Я бы предпочел объявить некоторый общий интерфейс IHaveDynamicData
... как на самом деле в аналогичном случае, показанном здесь Как я могу использовать/создавать динамический шаблон для компиляции динамического компонента с помощью Angular 2.0?
Ответ 2
Я не знаком с Angular 2. Я отвечаю вам из TypeScript:
Проблема проста: вы пытаетесь вернуть частный класс из функции. Это просто неправильный способ сделать это. Это не правильный способ объявить и экспортировать модули и классы.
Каждый файл является модулем, вам не нужно его явно указывать. Не указывайте имена постфиксных переменных с помощью "Module", поскольку переменные не являются модулями.
Используйте ключевое слово export
перед определением класса и вытащите его из любой функции. Класс должен быть расположен непосредственно на модуле (файле).
export fromConfiguration: (configuration: Configuration) => {
@NgModule({
providers: [
{
provide: BASE_PATH,
useValue: basePath
},
{
provide: Configuration,
useValue: configuration
},
RegistrationApi,
AuthApi,
AccountApi,
ContactsApi,
ContactOrgsApi
],
imports: [
CommonModule,
HttpModule
]
})
}
export class UserApiClient { }