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