diff --git a/docs/guide/api-hmr.md b/docs/guide/api-hmr.md index e9a44eb0aaca88..3202ad4d50bf34 100644 --- a/docs/guide/api-hmr.md +++ b/docs/guide/api-hmr.md @@ -10,7 +10,10 @@ Vite exposes its manual HMR API via the special `import.meta.hot` object: ```ts twoslash import type { ModuleNamespace } from 'vite/types/hot.d.ts' -import type { InferCustomEventPayload } from 'vite/types/customEvent.d.ts' +import type { + CustomEventName, + InferCustomEventPayload, +} from 'vite/types/customEvent.d.ts' // ---cut--- interface ImportMeta { @@ -32,15 +35,18 @@ interface ViteHotContext { prune(cb: (data: any) => void): void invalidate(message?: string): void - on( + on( event: T, cb: (payload: InferCustomEventPayload) => void, ): void - off( + off( event: T, cb: (payload: InferCustomEventPayload) => void, ): void - send(event: T, data?: InferCustomEventPayload): void + send( + event: T, + data?: InferCustomEventPayload, + ): void } ``` diff --git a/packages/vite/types/customEvent.d.ts b/packages/vite/types/customEvent.d.ts index 9202738f8227fb..bc23f003638f21 100644 --- a/packages/vite/types/customEvent.d.ts +++ b/packages/vite/types/customEvent.d.ts @@ -33,7 +33,12 @@ export interface InvalidatePayload { } /** - * provides types for built-in Vite events + * provides types for payloads of built-in Vite events */ export type InferCustomEventPayload = T extends keyof CustomEventMap ? CustomEventMap[T] : any + +/** + * provides types for names of built-in Vite events + */ +export type CustomEventName = keyof CustomEventMap | (string & {}) diff --git a/packages/vite/types/hot.d.ts b/packages/vite/types/hot.d.ts index 8ef92cda54c129..bc09e99293acdf 100644 --- a/packages/vite/types/hot.d.ts +++ b/packages/vite/types/hot.d.ts @@ -1,4 +1,4 @@ -import type { InferCustomEventPayload } from './customEvent' +import type { CustomEventName, InferCustomEventPayload } from './customEvent' export type ModuleNamespace = Record & { [Symbol.toStringTag]: 'Module' @@ -24,13 +24,16 @@ export interface ViteHotContext { prune(cb: (data: any) => void): void invalidate(message?: string): void - on( + on( event: T, cb: (payload: InferCustomEventPayload) => void, ): void - off( + off( event: T, cb: (payload: InferCustomEventPayload) => void, ): void - send(event: T, data?: InferCustomEventPayload): void + send( + event: T, + data?: InferCustomEventPayload, + ): void }