Skip to content

Commit b904bb2

Browse files
committed
fix: return type
1 parent 65f59d3 commit b904bb2

File tree

2 files changed

+37
-10
lines changed

2 files changed

+37
-10
lines changed

src/hooks/useBoolean.ts

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,45 @@
11
import { useCallback } from 'react';
22
import useToggle from './useToggle';
33

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+
425
/**
526
* 默认切换布尔值状态,也可以接收一个参数作为新的值
627
*/
7-
const useBoolean = (defaultValue: boolean = false) => {
28+
const useBoolean = (defaultValue: boolean = false): BooleanHandler => {
829
const { state, toggle } = useToggle(defaultValue);
930

1031
const setTrue = useCallback(() => toggle(true), [toggle]);
1132

1233
const setFalse = useCallback(() => toggle(false), [toggle]);
1334

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;
2043
};
2144

2245
export default useBoolean;

src/hooks/useInterval.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@ type IntervalHandlerAsObject = {
1616
intervalId: number | null;
1717
};
1818

19-
type IntervalHandlerAsArray = [() => void, () => void, number | null];
19+
type IntervalHandlerAsArray = Array<number | (() => void) | null> & {
20+
0: () => void;
21+
1: () => void;
22+
2: number | null;
23+
};
2024

21-
type IntervalHandler = IntervalHandlerAsArray & IntervalHandlerAsObject;
25+
type IntervalHandler = IntervalHandlerAsArray & {};
2226

2327
/**
2428
* useInterval
@@ -75,7 +79,7 @@ function useInterval(
7579
(handler as IntervalHandlerAsObject).stop = stop;
7680
(handler as IntervalHandlerAsObject).intervalId = internalIdRef.current;
7781

78-
return handler as IntervalHandler;
82+
return handler as IntervalHandlerAsArray & IntervalHandlerAsObject;
7983
}
8084

8185
export default useInterval;

0 commit comments

Comments
 (0)