From da2e5423e6c715932f27ae542897885feb0e088b Mon Sep 17 00:00:00 2001 From: pierrezimmermann Date: Thu, 22 Jun 2023 12:07:50 +0200 Subject: [PATCH 1/3] fix: correct type inference for props when initialProps is used --- src/__tests__/renderHook.test.tsx | 34 +++++++++++++++++++++++++++++++ src/renderHook.tsx | 12 ++++------- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/__tests__/renderHook.test.tsx b/src/__tests__/renderHook.test.tsx index 389f38ffa..f2b7a6a82 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 infered 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..8445aa985 100644 --- a/src/renderHook.tsx +++ b/src/renderHook.tsx @@ -8,16 +8,12 @@ export type RenderHookResult = { unmount: () => void; }; -export type RenderHookOptions = Props extends - | object - | string - | number - | boolean - ? { - initialProps: Props; +export type RenderHookOptions = + | { + initialProps?: Props; wrapper?: ComponentType; } - : { wrapper?: ComponentType; initialProps?: never } | undefined; + | undefined; export function renderHook( renderCallback: (props: Props) => Result, From f6e8371978d868c2338ac8486dc0f24c7e6d28af Mon Sep 17 00:00:00 2001 From: Maciej Jastrzebski Date: Thu, 22 Jun 2023 17:06:19 +0200 Subject: [PATCH 2/3] Update src/__tests__/renderHook.test.tsx --- src/__tests__/renderHook.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/__tests__/renderHook.test.tsx b/src/__tests__/renderHook.test.tsx index f2b7a6a82..6e9f231a5 100644 --- a/src/__tests__/renderHook.test.tsx +++ b/src/__tests__/renderHook.test.tsx @@ -80,7 +80,7 @@ test('props type is infered correctly when initial props is defined', () => { expect(result.current).toBe(6); }); -test('props type is infered correctly when initial props is explicitly undefined', () => { +test('props type is inferred correctly when initial props is explicitly undefined', () => { const { result, rerender } = renderHook( (num: number | undefined) => useMyHook(num), { From c5d1e47e52f88ad297216dfac323e7e4bfd2cce7 Mon Sep 17 00:00:00 2001 From: pierrezimmermann Date: Thu, 29 Jun 2023 12:17:04 +0200 Subject: [PATCH 3/3] refactor: simplify type of Renderhook options --- src/renderHook.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/renderHook.tsx b/src/renderHook.tsx index 8445aa985..ada485dc4 100644 --- a/src/renderHook.tsx +++ b/src/renderHook.tsx @@ -8,12 +8,10 @@ export type RenderHookResult = { unmount: () => void; }; -export type RenderHookOptions = - | { - initialProps?: Props; - wrapper?: ComponentType; - } - | undefined; +export type RenderHookOptions = { + initialProps?: Props; + wrapper?: ComponentType; +}; export function renderHook( renderCallback: (props: Props) => Result,