用途
本技能面向在 TypeScript 项目中使用 Zustand 的场景,帮助开发者建立类型安全的状态管理代码。Zustand 本身对 TypeScript 有较好的开箱支持,本技能进一步整理类型安全模式与最佳实践,覆盖类型安全的 store 创建、带类型的 selector 以及进阶 TypeScript 模式。
主要能力
- 基础类型安全 store:通过定义 store 接口并配合 create 使用,例如 BearStore 接口(bears、increasePopulation、removeAllBears、updateBears)作为示例结构。
- 类型推断:Zustand 可自动推断类型,示例中通过 ReturnType<typeof useStore.getState> 得到推断出的 store 类型。
- 类型安全 selector:为可复用逻辑创建带类型的 selector 函数,示例包括按过滤条件选择 todo、统计活跃 todo 数量。
- Slice 类型模式:使用 StateCreator 为大型应用拆分类型安全的 slice,示例包含 BearSlice、FishSlice、SharedSlice 及组合后的 useBoundStore。
- 泛型 store 工厂:用泛型创建可复用工厂,示例中的 createAsyncStore 返回 StoreApi<AsyncStore<T>>。
- 类型安全中间件:正确标注中间件类型,示例结合 persist 与 devtools 使用。
使用方式
技能正文以代码示例讲解各模式,包括类型安全的 CRUD store(声明 CrudStore<T extends Entity> 接口并实现 createCrudStore)、强类型 action(使用可辨识联合 Action 与 dispatch)、命名空间模式(在 Store 中组织 auth 与 cart)、类型安全事件发射器(Events 映射与 on/off/emit)。使用时按示例定义接口、用 create<Store>() 传入,并为 selector、slice、工厂函数补齐类型标注。
最佳实践与反模式
实践建议包括:始终定义显式的 store 接口;为 selector 写类型标注;用 slice 与泛型组织大型 store;为中间件标注正确类型。反模式包括:不要使用 any 类型、不要忽略返回类型、不要把状态与操作混在同一类型中(应拆分 StoreState 与 StoreActions 再用交叉类型组合)。
适用场景与限制
适用于 React / 前端项目在 TypeScript 下使用 Zustand 管理状态的场景,尤其适合需要严格类型约束的中大型 store。相关技能包括 zustand-store-patterns、zustand-middleware、zustand-advanced-patterns。资料中未提供安装命令、依赖版本、授权方式、收费信息或具体平台限制,暂未提供。