user2842288 user2842288 - 1 month ago 16
TypeScript Question

Error when exporting function that returns class: Exported variable has or is using private name

I'm getting the error


error TS4025: Exported variable 'UserApiClientModule' has or is using private name 'UserApiClient'.


in the following code:

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


I suspect the solution is to export the type UserApiClient somehow but I'm not sure how to do this since it's declared in a function.

Answer

The point here is:

Typescript tries to guess what is the returned type of all the public parts. And not only guess, but to really declare the UserApiClient as a part of returned type of the fromConfiguration call

And because we return something, which is not exported, is internal.. there is a problem. But we can easily return something else, e.g. some common interface ... or at least magical any

// change this
export var UserApiClientModule = {
  fromConfiguration: (configuration: Configuration) => {
    @NgModule({
    ...


// to that
export var UserApiClientModule = {                // below is the change
  fromConfiguration: (configuration: Configuration) : any => {
    @NgModule({
    ...

I would prefer to declare some common interface IHaveDynamicData ... as in fact in similar case shown here How can I use/create dynamic template to compile dynamic Component with Angular 2.0?

Comments