Skip to content

Commit 3cb8f92

Browse files
committed
simplify typing test & fix type definitions
1 parent eaee298 commit 3cb8f92

File tree

2 files changed

+32
-32
lines changed

2 files changed

+32
-32
lines changed

index.d.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { cleanup, act, RenderOptions, RenderResult } from 'react-testing-library'
22

3-
export function renderHook<P extends any, T extends (...args: [P]) => any>(
4-
callback: (_: P) => ReturnType<T>,
3+
export function renderHook<P extends any, R extends any>(
4+
callback: (...args: [P]) => R,
55
options?: {
66
initialProps?: P
77
} & RenderOptions
88
): {
99
readonly result: {
10-
current: ReturnType<T>
10+
current: R
1111
}
1212
readonly unmount: RenderResult['unmount']
1313
readonly rerender: (hookProps?: P) => void

test/typescript/renderHook.ts

+29-29
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,55 @@
1-
import { useState, createContext, useContext, useMemo } from 'react'
1+
import { useState, useCallback } from 'react'
22
import { renderHook } from 'react-hooks-testing-library'
33

4-
const DARK: 'dark' = 'dark'
5-
const LIGHT: 'light' = 'light'
6-
7-
type InitialTheme = typeof DARK | typeof LIGHT | undefined
8-
9-
const themes = {
10-
light: { primaryLight: '#FFFFFF', primaryDark: '#000000' },
11-
dark: { primaryLight: '#000000', primaryDark: '#FFFFFF' }
12-
}
13-
14-
const ThemesContext = createContext(themes)
15-
16-
const useTheme = (initialTheme: InitialTheme = DARK) => {
17-
const themes = useContext(ThemesContext)
18-
const [theme, setTheme] = useState(initialTheme)
19-
const toggleTheme = () => {
20-
setTheme(theme === 'light' ? 'dark' : 'light')
4+
const useCounter = (initialCount: number = 0) => {
5+
const [count, setCount] = useState(initialCount)
6+
const incrementBy = useCallback(
7+
(n: number) => {
8+
setCount(count + n)
9+
},
10+
[count]
11+
)
12+
const decrementBy = useCallback(
13+
(n: number) => {
14+
setCount(count - n)
15+
},
16+
[count]
17+
)
18+
return {
19+
count,
20+
incrementBy,
21+
decrementBy
2122
}
22-
return useMemo(() => ({ ...themes[theme], toggleTheme }), [theme])
2323
}
2424

2525
function checkTypesWithNoInitialProps() {
26-
const { result, unmount, rerender } = renderHook(() => useTheme())
26+
const { result, unmount, rerender } = renderHook(() => useCounter())
2727

2828
// check types
2929
const _result: {
3030
current: {
31-
primaryDark: string
32-
primaryLight: string
33-
toggleTheme: () => void
31+
count: number
32+
incrementBy: (_: number) => void
33+
decrementBy: (_: number) => void
3434
}
3535
} = result
3636
const _unmount: () => boolean = unmount
3737
const _rerender: () => void = rerender
3838
}
3939

4040
function checkTypesWithInitialProps() {
41-
const { result, unmount, rerender } = renderHook(({ theme }) => useTheme(theme), {
42-
initialProps: { theme: DARK }
41+
const { result, unmount, rerender } = renderHook(({ count }) => useCounter(count), {
42+
initialProps: { count: 10 }
4343
})
4444

4545
// check types
4646
const _result: {
4747
current: {
48-
primaryDark: string
49-
primaryLight: string
50-
toggleTheme: () => void
48+
count: number
49+
incrementBy: (_: number) => void
50+
decrementBy: (_: number) => void
5151
}
5252
} = result
5353
const _unmount: () => boolean = unmount
54-
const _rerender: (_?: { theme: typeof DARK }) => void = rerender
54+
const _rerender: (_?: { count: number }) => void = rerender
5555
}

0 commit comments

Comments
 (0)