Cách sử dụng Zustand với TypeScript để có type safety?

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.

Xem toàn bộ State Management cùng filter theo level & chủ đề con.

Mở danh sách State Management