diff --git a/.changeset/wet-dryers-care.md b/.changeset/wet-dryers-care.md new file mode 100644 index 00000000..71044952 --- /dev/null +++ b/.changeset/wet-dryers-care.md @@ -0,0 +1,5 @@ +--- +'react-simplikit': patch +--- + +The implementation of `useStorageState` now allows not only type aliases but also types defined as interfaces within `Serializable`. diff --git a/src/hooks/useStorageState/useStorageState.ts b/src/hooks/useStorageState/useStorageState.ts index 5d87d2e3..5d3426b1 100644 --- a/src/hooks/useStorageState/useStorageState.ts +++ b/src/hooks/useStorageState/useStorageState.ts @@ -4,8 +4,12 @@ import { SetStateAction, useCallback, useRef, useSyncExternalStore } from 'react import { safeLocalStorage, Storage } from './storage.ts'; type ToObject = T extends unknown[] | Record ? T : never; +type ToClosedObject = { [K in keyof T]: T[K] }; +type NotFunction = T extends (...args: unknown[]) => unknown ? never : T; -export type Serializable = T extends string | number | boolean ? T : ToObject; +export type Serializable = T extends string | number | boolean + ? T + : ToObject | (ToClosedObject & NotFunction); type StorageStateOptions = { storage?: Storage;