inversify typescript工厂绑定返回联合类型?

inversify typescript工厂绑定返回联合类型?,typescript,inversifyjs,Typescript,Inversifyjs,我正在使用inversify v4.13.0和Typescript,这两个我都是新手 我有一个记录器界面: interface Logger { log(level: string, message: string, meta?: any): void; } 类型文件: const TYPES = { Config: Symbol.for('Config'), LoggerFactory: Symbol.for('Factory<Logger>') }; 工厂似乎返回

我正在使用inversify v4.13.0和Typescript,这两个我都是新手

我有一个
记录器
界面:

interface Logger {
  log(level: string, message: string, meta?: any): void;
}
类型文件:

const TYPES = {
  Config: Symbol.for('Config'),
  LoggerFactory: Symbol.for('Factory<Logger>')
};
工厂似乎返回了一种联合返回的类型——工厂函数(奇怪???)和记录器

我检查了typedefs,这似乎是正确的,尽管我不明白这是如何工作的。从typedefs:

type Factory<T> = (...args: any[]) => (((...args: any[]) => T) | T);
type Factory=(…args:any[])=>(((…args:any[])=>T)|T;

我是否错误地将inversify用于工厂?如何更正此问题?

我猜测这是为什么以这种方式实现的——允许在绑定时使用两次curry。如果Factory不是联合类型,则无法绑定以下内容:

context => (options) => (destination) => { ...destination based logger... }
但是,正如您刚才指出的,如果您确信工厂不会返回闭包,您可以将其转换为所需的类型。您也可以在分配时这样做:

const logger: Logger = referenceContainer.get<interfaces.Factory<Logger>>(TYPES.LoggerFactory)(config.loggerOptions) as Logger;
const logger:logger=referenceContainer.get(TYPES.LoggerFactory)(config.loggerOptions)作为记录器;
如果可能,最好使用
@inject
装饰器。我认为,由于这是类似入口点的
runApp
函数,因此可以使用它。但除此之外,为了获得良好的解耦性和可测试性,我们应该使用decorator

type Factory<T> = (...args: any[]) => (((...args: any[]) => T) | T);
context => (options) => (destination) => { ...destination based logger... }
const logger: Logger = referenceContainer.get<interfaces.Factory<Logger>>(TYPES.LoggerFactory)(config.loggerOptions) as Logger;