From 7bbbe47a58cf45a971c46bd2de5101304acb85da Mon Sep 17 00:00:00 2001 From: Xiao Date: Sun, 12 May 2019 13:11:19 +0800 Subject: [PATCH] fix(useMap): more stringent type --- src/useMap.ts | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/useMap.ts b/src/useMap.ts index 8930a0eb..749ac656 100644 --- a/src/useMap.ts +++ b/src/useMap.ts @@ -1,27 +1,28 @@ import { useState } from 'react'; -export interface Actions { - get: (key: K) => any; - set: (key: K, value: V) => void; - remove: (key: K) => void; +export interface Actions { + get: (key: K) => T[K]; + set: (key: K, value: T[K]) => void; + remove: (key: K) => void; reset: () => void; } -const useMap = (initialMap: any = {}): [T, Actions] => { - const [map, set] = useState(initialMap as any); +const useMap = (initialMap: T = {} as T): [T, Actions] => { + const [map, set] = useState(initialMap); return [ map, { - get: (key: string) => map[key], - set: (key: string, entry: any) => + get: (key: keyof T) => map[key as string], + set: (key: K, entry: T[K]) => { set({ - ...(map as any), + ...map, [key]: entry, - }), - remove: (key: string) => { - const { [key]: omit, ...rest } = map as any; - set(rest); + }); + }, + remove: (key: keyof T) => { + const { [key]: omit, ...rest } = map; + set(rest as T); }, reset: () => set(initialMap), },