Any TypeScript guru that could help me troubleshoot these errors? 😅
/createLocalStorage.ts(41,48): error TS2345: Argument of type 'string | number | symbol' is not assignable to parameter of type 'string
const storage = new MMKV();
const storageExtractors = {
string: (key: string) => storage.getString(key),
number: (key: string) => storage.getNumber(key),
boolean: (key: string) => storage.getBoolean(key),
} as const;
type StorageExtractorKey = keyof typeof storageExtractors;
type StorageContent = Record<string, StorageExtractorKey>;
type LocalStorage<CurrentStorageContent extends StorageContent> = {
addToStorage: <
Key extends keyof CurrentStorageContent,
Extractor extends typeof storageExtractors[CurrentStorageContent[Key]],
>(
key: Key,
value: Exclude<ReturnType<Extractor>, undefined>,
) => void;
getFromStorage: <
Key extends keyof CurrentStorageContent,
Extractor extends typeof storageExtractors[CurrentStorageContent[Key]],
>(
key: Key,
) => ReturnType<Extractor>;
};
export const createLocalStorage = <CurrentStorageContent extends StorageContent>(
storageContent: CurrentStorageContent,
): LocalStorage<CurrentStorageContent> => {
const getFromStorage = <Key extends keyof CurrentStorageContent>(
key: Key,
): ReturnType<typeof storageExtractors[CurrentStorageContent[Key]]> => {
const storageExtractor = storageContent[key];
return storageExtractors[storageExtractor](key);
};
const addToStorage = <Key extends keyof CurrentStorageContent>(
key: Key,
value: Exclude<ReturnType<typeof storageExtractors[CurrentStorageContent[Key]]>, undefined>,
) => {
return storage?.set(String(key), value);
};
return {
getFromStorage,
addToStorage,
};
};