angular - 从 - "createAction"函数获取类型

有两种创建 ngrx Action 的方法。一种是定义一个实现 Action 类的新类,另一种是使用“createAction”函数。有没有办法获取使用“createAction”方法创建的操作的类型?

例如,如果我有这个 Action :

export const getWorker = createAction(
  '[Worker Api] Get Worker',
  props<{ workerId: number }>()
);

我想在监听该 Action 的效果中获取 workerId:

getWorker$ = createEffect(() => {
return this.actions$.pipe(
  ofType(WeatherApiActions.getWorker),
  switchMap((action: { type: string, workerId: number }) => this.workerService.getWorker(action.workerId)),
  map((worker: IWorker) => WeatherApiActions.getWorkerSuccess({ worker }))
)})

和你一样,我不得不自己写类型。这使得效果与 Action 紧密耦合,这是一个巨大的缺点。所以我的问题是:我是否必须使用第一种创建操作的方法才能进行操作负载类型化?

最佳答案

当我想在我的效果中分享一些代码并弄清楚时,我确实需要它。

你的问题的答案是,不。你可以用一个简单的代码来获取 Action 类型。

使用 ReturnType实用程序类型,您可以从 createAction 创建的函数中提取 Action 类型.

创建如下 Action ,

const getWorker = createAction(
  '[Worker Api] Get Worker',
  props<{ workerId: number }>()
);

ReturnType<typeof getWorker>结果为类型 { workerId: number } & TypedAction<'[Worker Api] Get Worker'> .

如果你看ofType的声明代码库中的运算符函数,你会看到它也使用 ReturnType效用。

关于angular - 从 - "createAction"函数获取类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64941048/

相关文章:

visual-studio - Visual Studio 2019 安装问题

c# - 复杂的 Json 到 C# 对象反序列化类

html - 使用 selenium 抓取网页时缺少 HTML 内容

perl - 我怎样才能确保函数永远不会在 perl 中同时执行?

javascript - 如何使 vuetify 复选框仅在单击框而不是标签时使用react?

angular - 生成 Angular 库时的循环依赖

unity3d - Rigidbody AddForce 在 Photon Unity 中不起作用

react-native - React Native 中未生成短动态链接

kubernetes - Operator SDK Controller 无法更新自定义资源状态

ios - Swift 2.0 .contextMenu 从核心数据中多次删除