You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为NGXS的Store快照返回值及状态对象添加类型定义?

为NGXS Store的snapshot方法添加类型约束

要让store.snapshot()返回值获得完整的类型提示,只需两步就能实现:

1. 定义全局根状态类型

先把所有状态slice的类型整合为一个全局的根状态接口,确保每个slice的类型和对应状态类的模型一致:

// 单个状态slice的类型定义
interface AuthStateModel {
  isLoggedIn: boolean;
  user: { name: string } | null;
}

interface TodoStateModel {
  items: string[];
  loading: boolean;
}

// 全局根状态,属性名要和你在@State装饰器里定义的name一致
interface AppState {
  auth: AuthStateModel;
  todos: TodoStateModel;
}

2. 扩充NGXS Store的类型

用TypeScript的模块扩充特性,覆盖Store接口的snapshot方法返回类型:

// 在项目的类型定义文件(比如typings.d.ts)或者组件/服务文件中添加
declare module '@ngxs/store' {
  interface Store {
    snapshot(): AppState;
  }
}

使用效果

现在调用this.store.snapshot()时,TypeScript会自动推断返回的是AppState类型,访问this.store.snapshot().auth或this.store.snapshot().todos都会得到对应的类型提示,包括属性和属性类型。

注意:要确保每个状态类的@State装饰器中定义的name和AppState中的属性名完全匹配,比如AuthState的@State({ name: 'auth' })要对应AppState里的auth属性。

内容的提问来源于stack exchange,提问作者Thabo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:15:41