|
1 | 1 | import { useCallback } from 'react'; |
2 | 2 | import useToggle from './useToggle'; |
3 | 3 |
|
| 4 | +type BooleanHandlerAsObject = { |
| 5 | + state: boolean; |
| 6 | + toggle: (value?: boolean) => void; |
| 7 | + setTrue: () => void; |
| 8 | + setFalse: () => void; |
| 9 | +}; |
| 10 | + |
| 11 | +type BooleanHandlerAsArray = Array< |
| 12 | + | boolean |
| 13 | + | BooleanHandlerAsObject['toggle'] |
| 14 | + | BooleanHandlerAsObject['setTrue'] |
| 15 | + | BooleanHandlerAsObject['setFalse'] |
| 16 | +> & { |
| 17 | + 0: boolean; |
| 18 | + 1: BooleanHandlerAsObject['toggle']; |
| 19 | + 2: BooleanHandlerAsObject['setTrue']; |
| 20 | + 3: BooleanHandlerAsObject['setFalse']; |
| 21 | +}; |
| 22 | + |
| 23 | +type BooleanHandler = BooleanHandlerAsArray & {}; |
| 24 | + |
4 | 25 | /** |
5 | 26 | * 默认切换布尔值状态,也可以接收一个参数作为新的值 |
6 | 27 | */ |
7 | | -const useBoolean = (defaultValue: boolean = false) => { |
| 28 | +const useBoolean = (defaultValue: boolean = false): BooleanHandler => { |
8 | 29 | const { state, toggle } = useToggle(defaultValue); |
9 | 30 |
|
10 | 31 | const setTrue = useCallback(() => toggle(true), [toggle]); |
11 | 32 |
|
12 | 33 | const setFalse = useCallback(() => toggle(false), [toggle]); |
13 | 34 |
|
14 | | - return { |
15 | | - state, |
16 | | - toggle, |
17 | | - setTrue, |
18 | | - setFalse, |
19 | | - }; |
| 35 | + let handler: unknown; |
| 36 | + (handler as BooleanHandlerAsArray) = [state, toggle, setTrue, setFalse]; |
| 37 | + (handler as BooleanHandlerAsObject).state = state; |
| 38 | + (handler as BooleanHandlerAsObject).toggle = toggle; |
| 39 | + (handler as BooleanHandlerAsObject).setTrue = setTrue; |
| 40 | + (handler as BooleanHandlerAsObject).setFalse = setFalse; |
| 41 | + |
| 42 | + return handler as BooleanHandlerAsArray & BooleanHandlerAsObject; |
20 | 43 | }; |
21 | 44 |
|
22 | 45 | export default useBoolean; |
0 commit comments