diff --git a/packages/base-controller/src/ControllerMessenger.ts b/packages/base-controller/src/ControllerMessenger.ts index 1c080b9a7a..fa9f5b0d52 100644 --- a/packages/base-controller/src/ControllerMessenger.ts +++ b/packages/base-controller/src/ControllerMessenger.ts @@ -1,34 +1,40 @@ -type ActionHandler = ( +export type ActionHandler = ( ...args: ExtractActionParameters ) => ExtractActionResponse; -type ExtractActionParameters = Action extends { +export type ExtractActionParameters = Action extends { type: T; handler: (...args: infer H) => any; } ? H : never; -type ExtractActionResponse = Action extends { +export type ExtractActionResponse = Action extends { type: T; handler: (...args: any) => infer H; } ? H : never; -type ExtractEventHandler = Event extends { type: T; payload: infer P } +export type ExtractEventHandler = Event extends { + type: T; + payload: infer P; +} ? P extends unknown[] ? (...payload: P) => void : never : never; -type ExtractEventPayload = Event extends { type: T; payload: infer P } +export type ExtractEventPayload = Event extends { + type: T; + payload: infer P; +} ? P : never; -type GenericEventHandler = (...args: unknown[]) => void; +export type GenericEventHandler = (...args: unknown[]) => void; -type SelectorFunction = ( +export type SelectorFunction = ( ...args: Args ) => ReturnValue; -type SelectorEventHandler = ( +export type SelectorEventHandler = ( newValue: SelectorReturnValue, previousValue: SelectorReturnValue | undefined, ) => void;