Skip to content

Commit 95424b2

Browse files
authored
feat(types): type hints for hmr events (#19579)
1 parent a5ea6f0 commit 95424b2

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

docs/guide/api-hmr.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ Vite exposes its manual HMR API via the special `import.meta.hot` object:
1010

1111
```ts twoslash
1212
import type { ModuleNamespace } from 'vite/types/hot.d.ts'
13-
import type { InferCustomEventPayload } from 'vite/types/customEvent.d.ts'
13+
import type {
14+
CustomEventName,
15+
InferCustomEventPayload,
16+
} from 'vite/types/customEvent.d.ts'
1417

1518
// ---cut---
1619
interface ImportMeta {
@@ -32,15 +35,18 @@ interface ViteHotContext {
3235
prune(cb: (data: any) => void): void
3336
invalidate(message?: string): void
3437

35-
on<T extends string>(
38+
on<T extends CustomEventName>(
3639
event: T,
3740
cb: (payload: InferCustomEventPayload<T>) => void,
3841
): void
39-
off<T extends string>(
42+
off<T extends CustomEventName>(
4043
event: T,
4144
cb: (payload: InferCustomEventPayload<T>) => void,
4245
): void
43-
send<T extends string>(event: T, data?: InferCustomEventPayload<T>): void
46+
send<T extends CustomEventName>(
47+
event: T,
48+
data?: InferCustomEventPayload<T>,
49+
): void
4450
}
4551
```
4652

packages/vite/types/customEvent.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ export interface InvalidatePayload {
3333
}
3434

3535
/**
36-
* provides types for built-in Vite events
36+
* provides types for payloads of built-in Vite events
3737
*/
3838
export type InferCustomEventPayload<T extends string> =
3939
T extends keyof CustomEventMap ? CustomEventMap[T] : any
40+
41+
/**
42+
* provides types for names of built-in Vite events
43+
*/
44+
export type CustomEventName = keyof CustomEventMap | (string & {})

packages/vite/types/hot.d.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { InferCustomEventPayload } from './customEvent'
1+
import type { CustomEventName, InferCustomEventPayload } from './customEvent'
22

33
export type ModuleNamespace = Record<string, any> & {
44
[Symbol.toStringTag]: 'Module'
@@ -24,13 +24,16 @@ export interface ViteHotContext {
2424
prune(cb: (data: any) => void): void
2525
invalidate(message?: string): void
2626

27-
on<T extends string>(
27+
on<T extends CustomEventName>(
2828
event: T,
2929
cb: (payload: InferCustomEventPayload<T>) => void,
3030
): void
31-
off<T extends string>(
31+
off<T extends CustomEventName>(
3232
event: T,
3333
cb: (payload: InferCustomEventPayload<T>) => void,
3434
): void
35-
send<T extends string>(event: T, data?: InferCustomEventPayload<T>): void
35+
send<T extends CustomEventName>(
36+
event: T,
37+
data?: InferCustomEventPayload<T>,
38+
): void
3639
}

0 commit comments

Comments
 (0)