Skip to content

Commit 7bbbe47

Browse files
committed
fix(useMap): more stringent type
1 parent 5fe7171 commit 7bbbe47

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

src/useMap.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
11
import { useState } from 'react';
22

3-
export interface Actions<K, V> {
4-
get: (key: K) => any;
5-
set: (key: K, value: V) => void;
6-
remove: (key: K) => void;
3+
export interface Actions<T extends object> {
4+
get: <K extends keyof T>(key: K) => T[K];
5+
set: <K extends keyof T>(key: K, value: T[K]) => void;
6+
remove: <K extends keyof T>(key: K) => void;
77
reset: () => void;
88
}
99

10-
const useMap = <T extends { [key: string]: any }>(initialMap: any = {}): [T, Actions<string, any>] => {
11-
const [map, set] = useState<T>(initialMap as any);
10+
const useMap = <T extends object = any>(initialMap: T = {} as T): [T, Actions<T>] => {
11+
const [map, set] = useState<T>(initialMap);
1212

1313
return [
1414
map,
1515
{
16-
get: (key: string) => map[key],
17-
set: (key: string, entry: any) =>
16+
get: (key: keyof T) => map[key as string],
17+
set: <K extends keyof T>(key: K, entry: T[K]) => {
1818
set({
19-
...(map as any),
19+
...map,
2020
[key]: entry,
21-
}),
22-
remove: (key: string) => {
23-
const { [key]: omit, ...rest } = map as any;
24-
set(rest);
21+
});
22+
},
23+
remove: (key: keyof T) => {
24+
const { [key]: omit, ...rest } = map;
25+
set(rest as T);
2526
},
2627
reset: () => set(initialMap),
2728
},

0 commit comments

Comments
 (0)