[英]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.