diff --git a/src/useDebounceFn.ts b/src/useDebounceFn.ts index 08c8288..953a550 100644 --- a/src/useDebounceFn.ts +++ b/src/useDebounceFn.ts @@ -1,13 +1,15 @@ import { watch } from 'vue' import { useDebounce } from './useDebounce' -export function useDebounceFn(fn: Function, delay = 200) { +export function useDebounceFn any>(fn: T, delay = 200) { const debounceValue = useDebounce(0, delay) + let params: Parameters watch(debounceValue, () => { - fn() + fn(...params) }) - return () => { + return (...rest: Parameters) => { + params = rest debounceValue.value++ } } diff --git a/tests/useDebounceFn.test.ts b/tests/useDebounceFn.test.ts index b67956f..c812fde 100644 --- a/tests/useDebounceFn.test.ts +++ b/tests/useDebounceFn.test.ts @@ -1,11 +1,13 @@ import { nextTick } from 'vue' import { useDebounceFn } from '../src/useDebounceFn' -let callback: Function | null +let callback: (...rest: any[]) => any beforeEach(() => { jest.useFakeTimers() - callback = jest.fn() + callback = jest.fn((s: string) => { + console.log(s) + }) }) afterEach(() => { @@ -36,8 +38,10 @@ test('timer should be cleared when calling the function returned by useDebounceF test('callback should be called when timeout', async () => { const debounceFn = useDebounceFn(callback!) - debounceFn() + debounceFn('1') + debounceFn('2') jest.advanceTimersByTime(200) await nextTick() expect(callback!).toHaveBeenCalledTimes(1) + expect(callback!).toHaveBeenCalledWith('2') }) diff --git a/tests/useInterval.test.ts b/tests/useInterval.test.ts index e37a3bf..f7dd31d 100644 --- a/tests/useInterval.test.ts +++ b/tests/useInterval.test.ts @@ -55,7 +55,7 @@ test('interval will be start after invoking start', () => { clear!() expect(clearInterval).toHaveBeenCalledTimes(1) expect(clearInterval).toHaveBeenCalledWith(expect.any(Number)) - start() + start!() expect(setInterval).toHaveBeenCalled() expect(setInterval).toHaveBeenCalledWith(expect.any(Function), 500) jest.advanceTimersByTime(500)