Skip to content

Commit 025d473

Browse files
committed
fix: 优化注册中心TS类型
1 parent 9dec8ed commit 025d473

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

src/types/module-registry.d.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import { Component } from 'vue';
66
import { RouteRecordRaw } from 'vue-router';
7+
import { moduleRegistry } from '@/utils/module-registry'
78

89
// 基础类型定义
910
export type ModuleResourceKey = string;
@@ -84,6 +85,8 @@ export interface ModuleResource {
8485
locales?: LocaleModule;
8586
/** 状态管理 */
8687
stores?: Record<string, StoreModule>;
88+
/** 各种类型的事件 */
89+
events?: Record<string, UtilFunction>;
8790
/** 其他自定义资源 */
8891
[key: string]: any;
8992
}
@@ -195,10 +198,20 @@ export interface IModuleRegistry {
195198
* 搜索包含特定资源的模块
196199
*/
197200
searchModules(resourceType: keyof ModuleResource, resourceName?: string): string[];
201+
202+
/**
203+
* 注册远程模块
204+
*/
205+
loadRemoteModule(moduleId: string, path: string): Promise<void>
206+
207+
/**
208+
* 注册单个远程组件
209+
*/
210+
loadRemoteComponent(moduleId: string, path: string, componentName: string): Promise<void>
198211
}
199212

200213
// 泛型助手类型
201-
export type GetResourceType<T extends keyof ModuleResource> =
214+
export type GetResourceType<T extends keyof ModuleResource> =
202215
T extends 'apis' ? Record<string, ApiFunction | ApiModule> :
203216
T extends 'components' ? ComponentResource :
204217
T extends 'utils' ? Record<string, UtilFunction | UtilModule> :
@@ -207,6 +220,7 @@ export type GetResourceType<T extends keyof ModuleResource> =
207220
T extends 'routes' ? RouteModule :
208221
T extends 'locales' ? LocaleModule :
209222
T extends 'stores' ? Record<string, StoreModule> :
223+
T extends 'events' ? Record<string, UtilFunction> :
210224
any;
211225

212226
// 辅助工具类型
@@ -247,4 +261,4 @@ declare global {
247261
interface Window {
248262
__MODULE_REGISTRY__?: IModuleRegistry;
249263
}
250-
}
264+
}

src/utils/module-registry.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* 用于统一管理各个子模块的 API、组件、工具函数等资源
44
* 支持微前端和模块联邦
55
*/
6-
import type { ModuleResource, RegisterOptions } from '@/types/module-registry.d'
6+
import type { GetResourceType, ModuleResource, RegisterOptions } from '@/types/module-registry.d'
77
import { dynamicRemoteManager } from '@jetlinks-web/vite/dist/dynamic-remote'
88
import { isSubApp } from '@/utils/consts'
99

@@ -159,19 +159,14 @@ export class ModuleRegistry {
159159
* @param resourceType 资源类型
160160
* @returns 资源对象或undefined
161161
*/
162-
public getResource<T = any>(
162+
public getResource<T extends keyof Omit<ModuleResource, 'moduleId'>>(
163163
moduleId: string,
164-
resourceType: keyof ModuleResource
165-
): Record<string, T> | undefined {
164+
resourceType: T
165+
): GetResourceType<T> {
166166
const module = this.registry.get(moduleId);
167-
const resource = module?.[resourceType];
167+
const resource = module?.[resourceType] || {};
168168

169-
// 如果 resourceType 是 'routes',则可能不是 Record 类型
170-
if (resourceType === 'routes') {
171-
return resource as any;
172-
}
173-
174-
return resource as Record<string, T> | undefined;
169+
return resource as GetResourceType<T>;
175170
}
176171

177172
/**

0 commit comments

Comments
 (0)