@@ -31,12 +31,17 @@ The Qwik framework provides unique capabilities for managing state and effects i
31
31
32
32
<CodeFile src = " /src/routes/demo/cookbook/mediaController/index.tsx" >
33
33
``` tsx
34
- export const useDebouncer = (fn : QRL <(args : any ) => void >, delay : number ) => {
34
+ export const useDebouncer = <A extends readonly unknown [], R >(
35
+ fn : QRL <(... args : A ) => R >,
36
+ delay : number ,
37
+ ): QRL <(... args : A ) => void > => {
35
38
const timeoutId = useSignal <number >();
36
39
37
- return $ ((args : any ) => {
38
- clearTimeout (timeoutId .value );
39
- timeoutId .value = Number (setTimeout (() => fn (args ), delay ));
40
+ return $ ((... args : A ): void => {
41
+ window .clearTimeout (timeoutId .value );
42
+ timeoutId .value = window .setTimeout ((): void => {
43
+ void fn (... args );
44
+ }, delay );
40
45
});
41
46
};
42
47
```
@@ -93,12 +98,17 @@ We can leverage Qwik's `implicit$FirstArg` function to create a `useDebouncer$`
93
98
This is how Qwik actually implements all of its built-in $ hooks.
94
99
95
100
``` tsx
96
- export const useDebouncerQrl = (fn : QRL <(args : any ) => void >, delay : number ) => {
101
+ export const useDebouncerQrl = <A extends readonly unknown [], R >(
102
+ fn : QRL <(... args : A ) => R >,
103
+ delay : number ,
104
+ ): QRL <(... args : A ) => void > => {
97
105
const timeoutId = useSignal <number >();
98
106
99
- return $ ((args : any ) => {
100
- clearTimeout (timeoutId .value );
101
- timeoutId .value = Number (setTimeout (() => fn (args ), delay ));
107
+ return $ ((... args : A ): void => {
108
+ window .clearTimeout (timeoutId .value );
109
+ timeoutId .value = window .setTimeout ((): void => {
110
+ void fn (... args );
111
+ }, delay );
102
112
});
103
113
};
104
114
0 commit comments