You have to create the definition of your state separate from when you instantiate it.
interface MyState {
bears: number;
setBears: (value: number) => void;
getBears: () => number;
killBears: () => void;
}
const definition = (
set: (
partial:
| MyState
| Partial<MyState>
| ((state: MyState) => MyState | Partial<MyState>),
replace?: boolean | undefined
) => void,
get: () => MyState
) => ({
bears: 0,
setBears: (value: number) => set({ bears: value }),
getBears: () => get().bears,
killBears: () => set({ bears: 0 }),
} as MyState);
export const useState1 = create<MyState>(definition);
export const useState2 = create<MyState>(definition);