gpt4 book ai didi

angular - 编写自定义 ngrx 运算符并返回源可观察类型

转载 作者:行者123 更新时间:2023-12-03 17:07:16 25 4
gpt4 key购买 nike

我有一个自定义运算符,waitFor我在我的效果中使用它是这样的:

public effect$: Observable<Action> = createEffect(() => {
return this.actions$.pipe(
ofType(myAction),
waitFor<ReturnType<typeof myAction>>([anotherAction]),
...etc
);
});
它主要是查看correlationId,直到操作数组被调度后才继续执行。但这不是重点。
不出所料 ofType采用源可观察对象并将其用作返回类型,但是我正在努力实现相同的效果。正如你在上面看到的,我正在使用 ReturnType<typeof myAction>>以及以下内容在我的 waitFor 中方法:
export function waitFor<A extends Action>(actionsToWaitFor$: Array<Actions>): OperatorFunction<A, A> {
所以目前如果我调用 waitFor像这样:
public effect$: Observable<Action> = createEffect(() => {
return this.actions$.pipe(
ofType(myAction),
waitFor([anotherAction]),
...etc
);
});
那么它的类型被推断为 Action ,但我希望这是 ReturnType<typeof theSourceObservable>默认情况下。所以我假设我的 waitFor 中需要这样的东西方法:
export function waitFor<A extends ReturnType<typeof sourceObservable?!>>(actionsToWaitFor$: Array<Actions>): OperatorFunction<A, A> {
waitFor看起来像这样:
export function waitFor<A extends Action>(actionsToWaitFor$: Array<Actions>): OperatorFunction<A, A> {
return (source$) => {
return source$.pipe(
switchMap((action: A & { correlationId: string}) => {
// use zip() to wait for all actions
// and when omitting map((action) => action)
// so the original action is always returned
})
);
};
}
来自 ofType source ,看来我需要使用 Extract更新
StackBlitz 示例显示 here

最佳答案

这至少可以编译;我不知道它是否也满足您的需求。

public effect3$: Observable<Action> = createEffect(() => {
const a:Action[]= []

return this.actions$.pipe(
ofType(doSomething),
this.someCustomOperatorReturningStaticTypes(),
this.thisWontWork(a),
tap(({aCustomProperty}) => {
// The type is inferred
console.log(aCustomProperty);
}),
)
});

private thisWontWork<A extends Action>(actionsToWaitFor$: Action[]): OperatorFunction<A, A> {
return (source$) => {
return source$.pipe(
tap(() => {
console.log('Should work')
})
)
}
}
我无法在 StackBlitz 中运行它,有什么提示吗?
希望这可以帮助

关于angular - 编写自定义 ngrx 运算符并返回源可观察类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62500838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com