diff --git a/packages/react/src/hooks/use-echo.ts b/packages/react/src/hooks/use-echo.ts index a099e7d3..05ce47a0 100644 --- a/packages/react/src/hooks/use-echo.ts +++ b/packages/react/src/hooks/use-echo.ts @@ -4,6 +4,7 @@ import { echo } from "../config"; import type { Channel, ChannelData, + ChannelReturnType, Connection, ModelEvents, ModelPayload, @@ -157,7 +158,8 @@ export const useEcho = < /** * Channel instance */ - channel: () => subscription.current, + channel: () => + subscription.current as ChannelReturnType, }; }; diff --git a/packages/react/src/types.ts b/packages/react/src/types.ts index a95b8889..320a7121 100644 --- a/packages/react/src/types.ts +++ b/packages/react/src/types.ts @@ -16,6 +16,15 @@ export type Channel = { visibility: "private" | "public" | "presence"; }; +export type ChannelReturnType< + T extends BroadcastDriver, + V extends Channel["visibility"], +> = V extends "presence" + ? Broadcaster[T]["presence"] + : V extends "private" + ? Broadcaster[T]["private"] + : Broadcaster[T]["public"]; + export type ConfigDefaults = Record< O, Broadcaster[O]["options"] diff --git a/packages/vue/src/composables/useEcho.ts b/packages/vue/src/composables/useEcho.ts index 004e1eb6..db2c9035 100644 --- a/packages/vue/src/composables/useEcho.ts +++ b/packages/vue/src/composables/useEcho.ts @@ -4,6 +4,7 @@ import { echo } from "../config"; import type { Channel, ChannelData, + ChannelReturnType, Connection, ModelEvents, ModelPayload, @@ -173,7 +174,7 @@ export const useEcho = < /** * Channel instance */ - channel: () => subscription, + channel: () => subscription as ChannelReturnType, }; }; diff --git a/packages/vue/src/types.ts b/packages/vue/src/types.ts index a95b8889..320a7121 100644 --- a/packages/vue/src/types.ts +++ b/packages/vue/src/types.ts @@ -16,6 +16,15 @@ export type Channel = { visibility: "private" | "public" | "presence"; }; +export type ChannelReturnType< + T extends BroadcastDriver, + V extends Channel["visibility"], +> = V extends "presence" + ? Broadcaster[T]["presence"] + : V extends "private" + ? Broadcaster[T]["private"] + : Broadcaster[T]["public"]; + export type ConfigDefaults = Record< O, Broadcaster[O]["options"]