有两种创建 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/