diff --git a/miniprogram/core/Api.ts b/miniprogram/core/Api.ts index 05111ac..1105471 100644 --- a/miniprogram/core/Api.ts +++ b/miniprogram/core/Api.ts @@ -1,4 +1,4 @@ -import { Emitter, EventType } from "./Emitter"; +import { Emitter, EventType, EventMixin } from "./Emitter"; import { API_FAILED_SHOW_MESSAGE } from "./Config"; import { Logger, LogLabel, LevelLogLabel, colorRadio, StatusLabel } from "./Logger"; interface IAppAPIParam { @@ -156,16 +156,7 @@ class API< O extends IAnyData = IAnyData, E extends Record = Record, U extends IAnyData = IAnyData -> extends Emitter < - { - // 这个复杂的泛型是为了 MixIn 用户自定义事件类型 - // 懂得如何使用就可以了 - // 不要试图去理解下面这三行代码,真正的恶魔在等着你 - [P in (keyof (IAPIEvent & IAPIResultEvent) | keyof E)] : - P extends keyof IAPIEvent ? IAPIEvent[P] : - P extends keyof IAPIResultEvent ? IAPIResultEvent[P] : E[P] - } -> { +> extends Emitter & IAPIResultEvent, E>> { /** * 默认调试标签 diff --git a/miniprogram/core/Emitter.ts b/miniprogram/core/Emitter.ts index c649a83..1bfd2a7 100644 --- a/miniprogram/core/Emitter.ts +++ b/miniprogram/core/Emitter.ts @@ -15,7 +15,18 @@ export type EventHandlerMap> = Map< // Emitter function type type IEmitParamType, K extends keyof E> = - E[K] extends ( undefined | void ) ? [K] : [K, E[K]]; + E[K] extends ( undefined | void ) ? [type: K] : [type: K, evt: E[K]]; + +// Mixin to event object +export type EventMixin, B extends Record> = { + [P in (keyof A | keyof B)] : + P extends (keyof A & keyof B) ? + A[P] : + P extends keyof A ? + A[P] : + P extends keyof B ? B[P] : + never; +} export class Emitter> {