diff --git a/src/__tests__/renderHook.test.tsx b/src/__tests__/renderHook.test.tsx index 389f38ffa..6e9f231a5 100644 --- a/src/__tests__/renderHook.test.tsx +++ b/src/__tests__/renderHook.test.tsx @@ -60,3 +60,37 @@ test('allows wrapper components', async () => { expect(result.current).toEqual('provided'); }); + +const useMyHook = (param: number | undefined) => { + return param; +}; + +test('props type is infered correctly when initial props is defined', () => { + const { result, rerender } = renderHook( + (num: number | undefined) => useMyHook(num), + { + initialProps: 5, + } + ); + + expect(result.current).toBe(5); + + rerender(6); + + expect(result.current).toBe(6); +}); + +test('props type is inferred correctly when initial props is explicitly undefined', () => { + const { result, rerender } = renderHook( + (num: number | undefined) => useMyHook(num), + { + initialProps: undefined, + } + ); + + expect(result.current).toBeUndefined(); + + rerender(6); + + expect(result.current).toBe(6); +}); diff --git a/src/renderHook.tsx b/src/renderHook.tsx index 35965d00a..ada485dc4 100644 --- a/src/renderHook.tsx +++ b/src/renderHook.tsx @@ -8,16 +8,10 @@ export type RenderHookResult = { unmount: () => void; }; -export type RenderHookOptions = Props extends - | object - | string - | number - | boolean - ? { - initialProps: Props; - wrapper?: ComponentType; - } - : { wrapper?: ComponentType; initialProps?: never } | undefined; +export type RenderHookOptions = { + initialProps?: Props; + wrapper?: ComponentType; +}; export function renderHook( renderCallback: (props: Props) => Result,