mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
improved singleton types inferring
Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
1 parent
0dbb47a398
commit
a3edb75fea
9 files changed
+17
-16
No files matched your search
@@ -192,4 +192,4 @@ export class ClusterStore extends BaseStore<ClusterStoreModel> {
|
||||
}
|
||||
}
|
||||
|
||||
export const clusterStore: ClusterStore = ClusterStore.getInstance();
|
||||
export const clusterStore = ClusterStore.getInstance<ClusterStore>();
|
||||
@@ -45,4 +45,4 @@ export class Tracker extends Singleton {
|
||||
}
|
||||
}
|
||||
|
||||
export const tracker: Tracker = Tracker.getInstance(app || remote.app);
|
||||
export const tracker = Tracker.getInstance<Tracker>(app || remote.app);
|
||||
@@ -75,4 +75,4 @@ export class UserStore extends BaseStore<UserStoreModel> {
|
||||
}
|
||||
}
|
||||
|
||||
export const userStore: UserStore = UserStore.getInstance();
|
||||
export const userStore = UserStore.getInstance<UserStore>();
|
||||
@@ -6,11 +6,13 @@
|
||||
* const usersStore: UsersStore = UsersStore.getInstance();
|
||||
*/
|
||||
|
||||
type Constructor<T = {}> = new (...args: any[]) => T;
|
||||
|
||||
class Singleton {
|
||||
private static instances = new WeakMap<object, Singleton>();
|
||||
|
||||
// todo: figure out how to infer child class + arguments types
|
||||
static getInstance<T extends Singleton>(...args: any[]): T {
|
||||
// todo: improve types inferring
|
||||
static getInstance<T>(...args: ConstructorParameters<Constructor<T>>): T {
|
||||
if (!Singleton.instances.has(this)) {
|
||||
Singleton.instances.set(this, Reflect.construct(this, args));
|
||||
}
|
||||
|
||||
@@ -93,4 +93,4 @@ export class WorkspaceStore extends BaseStore<WorkspaceStoreModel> {
|
||||
}
|
||||
}
|
||||
|
||||
export const workspaceStore: WorkspaceStore = WorkspaceStore.getInstance()
|
||||
export const workspaceStore = WorkspaceStore.getInstance<WorkspaceStore>()
|
||||
Reference in new issue
Block a user