繁体   English   中英

TypeScript singleton 由工厂生成 function 丢失分型

[英]TypeScript singleton generated with a factory function looses typings

我有一个含糖的 javascript SDK,其中库在运行时的任何给定点被实例化,但从那时起就是 singleton。 如中,重复调用文件的default返回相同的实例。

我的问题是我的类型在库的定义和实例化之间丢失了。

请参阅此代码:

const Factory = (args?: Record<string, unknown>) => {

  return {
    action: {
        method: (code: 'SOME'|'CODES') => console.log('Doing something with', code)
    }
  }
}

let instance

export default (args?: Record<string, unknown>) => {

  if (!instance)
    instance = Factory(args)

  return instance

}

如果我直接实例Factory ,我就正确地提供了打字。 但是,文件的导出接口试图确保实例始终返回 singleton。 在那个过程中,我们丢失了类型。

为了保留打字,我应该如何在这里输入instance

约束:

  • 我不想在与定义松散匹配的界面中重新键入所有内容
  • 初始实例可以由用户在运行时的任何时候实例化(不能假定在引导程序上创建)
  • 由于返回的嵌套方法的潜在复杂性,不应使用类。

您可以使用ReturnType实用程序类型来获取Factory返回的实例的推断类型,然后在instance类型和默认导出的返回类型中使用该类型。 请参阅下面LibInstanceType

const Factory = (args?: Record<string, unknown>) => {

  return {
    action: {
        method: (code: 'SOME'|'CODES') => console.log('Doing something with', code)
    }
  }
};

type LibInstanceType = ReturnType<typeof Factory>;

let instance: LibInstanceType | undefined;

export default (args?: Record<string, unknown>): LibInstanceType => {

  if (!instance)
    instance = Factory(args);

  return instance;

};

游乐场链接

暂无
暂无

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

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