Zustand 中如何用 TypeScript 定义 Store 类型?
定义一个包含状态和方法的 interface,作为 create 的泛型参数传入即可:create
追问
中间件会改变 store 类型,怎么处理类型组合?
persist/devtools 等中间件会向 store 注入额外属性(如 persist.clearStorage),需定义扩展类型 type Store = StoreState & StorePersist,再用 create
StateCreator 泛型怎么用? StateCreator<StoreState, Mutators, U> 用于拆分 store 逻辑时约束每个切片的类型,Mutators 描述中间件链对 set/get 的改写,U 是未包装的原始类型。手动组合切片时需要用到。
selector 的返回类型怎么保证?
useStore(s => s.count) 自动推断为 number。自定义 selector 返回派生值时,TypeScript 能推断返回类型;如果需要显式标注,写 useStore
泛型 store 怎么定义?
function createSlice
set 的 partial 参数类型为什么不是 Partial
写段代码
tsinterface BearState { bears: number inc: (n: number) => void } const useBearStore = create<BearState>((set) => ({ bears: 0, inc: (n) => set((s) => ({ bears: s.bears + n })), })) // 组件中 const bears = useBearStore((s) => s.bears) // number