Zustand v4+ dùng curried create với generic create<StoreType>() — thiếu dấu () thứ hai TypeScript sẽ không infer đúng.
- Pattern chuẩn với TypeScript: định nghĩa type cho toàn bộ store trước, rồi pass vào generic.
- Zustand v4+ dùng curried create:
create<StoreType>()((set, get) => ({...}))— dấu()thứ hai bắt buộc để TypeScript infer đúng.
Ví dụ: interface CartStore { items: CartItem[]; total: number; addItem: (item: CartItem) => void; clearCart: () => void } → const useCartStore = create<CartStore>()((set, get) => ({ items: [], total: 0, addItem: (item) => set(s => ({ items: [...s.items, item], total: s.total + item.price })), clearCart: () => set({ items: [], total: 0 }) })).
Pitfall: không nên dùng create mà không có generic — mất type safety và set nhận any.