简体   繁体   English

如何在TypeScript中导出多个对象实例?

[英]How can I export multiple object instances in TypeScript?

I am building a library in TypeScript that is using a dependency injection system (inversifyJS) to construct itself and resolve dependencies internally. 我在TypeScript中构建一个库,该库使用依赖注入系统(inversifyJS)来构建自身并在内部解析依赖关系。 The problem I have is - I want to expose multiple instances from the injection system to the consumers of the library. 我遇到的问题是 - 我想将多个实例从注入系统暴露给库的使用者。

Currently what I am trying to do is: 目前我想做的是:

import kernel from "./src/inversify.config";
import EntityManager from './src/manager/entityManager.service';
import StorageService from './src/storage/storage.service';
import LanguageService from './src/language/language.service';

export { kernel.get<EntityManager>(EntityManager) as EntityManagerInstance };
export { kernel.get<EntityManager>(LanguageService) as LanguageServiceInstance };
export { kernel.get<EntityManager>(StorageService) as StorageServiceInstance };

A solution that I see is possible is to use a facade to export types and access them later: 我看到的解决方案是使用Facade导出类型并在以后访问它们:

import EntityManager from './src/manager/entityManager.service';
import StorageService from './src/storage/storage.service';
import LanguageService from './src/language/language.service';
import InjectionFacade from './utils/injection.facede';

export { EntityManager, LanguageService, StorageService, InjectiorFacade }; 
// Usage: 
// import {InjectionFacade, StorageService} from 'entity-manager';
// let injectionFacade: InjectionFacade = InjectionFacade.createAndResolve();
// let storageService: StorageService = injectionFacade.getStorageService();

But the problem with this is I have one more useless abstraction 但问题是我有一个无用的抽象

Is there a way to implement this kind of solution without loosing type definitions and exporting ready-to-use objects? 有没有办法在不丢失类型定义和导出即用型对象的情况下实现这种解决方案?

You'd want to use a multiple-declaration variable, eg 您想要使用多声明变量,例如

export const
    EntityManagerInstance = kernel.get<EntityManager>(EntityManager),
    LanguageServiceInstance = kernel.get<EntityManager>(LanguageService),
    StorageServiceInstance = kernel.get<EntityManager>(StorageService);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM