Reactjs 有效载荷类型为don';不匹配。但在没有有效载荷的情况下,它仍在工作

Reactjs 有效载荷类型为don';不匹配。但在没有有效载荷的情况下,它仍在工作,reactjs,typescript,redux,redux-observable,Reactjs,Typescript,Redux,Redux Observable,代码如下 import { Action } from "redux"; import { ActionsObservable, ofType, combineEpics } from 'redux-observable' import { map } from 'rxjs/operators' export enum ActionTypes { One = 'ACTION_ONE', Two = 'ACTION_TWO' } export interface One ext

代码如下

import { Action } from "redux";
import { ActionsObservable, ofType, combineEpics } from 'redux-observable'
import { map } from 'rxjs/operators'

export enum ActionTypes {
    One = 'ACTION_ONE',
    Two = 'ACTION_TWO'
}

export interface One extends Action {
    type: ActionTypes.One
    //commnent out next line to remove error
    myStr: string
}

export const doOne = (myStr: string): One => ({ 
    type: ActionTypes.One,
    //comment out next line to remove error
    myStr 
})

export interface Two extends Action {
    type: ActionTypes.Two
    myBool: boolean
}

export const doTwo = (myBool: boolean): Two => ({ type: ActionTypes.Two, myBool })

export type Actions = One | Two

export const epic = (action$: ActionsObservable<Actions>) => 
    action$.pipe(
        ofType<Actions, One>(ActionTypes.One),
        map((action: any) => ({
            type: ActionTypes.Two,
            myBool: true
        }))
    )

export const rootEpic = combineEpics(epic)

在过去的4个小时里,我一直在尝试将有效负载添加到操作中,但对于每个可能的过滤器解决方案,它都失败了。我试着在redux observable github部分和他们的聊天室寻求帮助。我还用谷歌搜索了一个严格键入的简单示例。没有找到任何解决方案。

我的问题与您的问题相同,我的解决方案是:

当您严格键入epic时:

export const epic = (action$: ActionsObservable<Actions>)

// Not the subject, but I would prefer
export const epic: Epic<Actions> = action$ => 
export const epic=(action$:ActionsObservable)
//不是主题,但我更喜欢
导出常量epic:epic=action$=>
您还必须严格键入您的电子邮件地址:

const epicMiddleware = createEpicMiddleware<Actions>()
const-epicMiddleware=createEpicMiddleware()

这样,您的
epicMiddleware.run
方法将尝试
操作,而不是
操作
,它应该可以工作。

我遇到了与您相同的问题,我的解决方案是:

当您严格键入epic时:

export const epic = (action$: ActionsObservable<Actions>)

// Not the subject, but I would prefer
export const epic: Epic<Actions> = action$ => 
export const epic=(action$:ActionsObservable)
//不是主题,但我更喜欢
导出常量epic:epic=action$=>
您还必须严格键入您的电子邮件地址:

const epicMiddleware = createEpicMiddleware<Actions>()
const-epicMiddleware=createEpicMiddleware()

这样,您的
epicMiddleware.run
方法将尝试
操作,而不是
操作
,它应该可以工作。

只需遵循示例即可。这个存储库真正关心的是严格类型化。Redux可观察的用户只关心它是否与javascript一起工作。如果它不适用于严格类型的typescript,那么他们就会忽略这个问题。忽略任何求助请求。幸运的是,typesafe操作示例是用redux observable构建的,所以它对我很有用

只需遵循示例。这个存储库真正关心的是严格类型化。Redux可观察的用户只关心它是否与javascript一起工作。如果它不适用于严格类型的typescript,那么他们就会忽略这个问题。忽略任何求助请求。幸运的是,typesafe操作示例是用redux observable构建的,所以它对我很有用

我可以通过使用(action$:any)而不是(action$:ActionsObservable)来让它工作,但这并不是完美的解决方案。这实际上是一个非常好的问题,我也想得到一个更好的答案。我最后键入了rootEpic,因为它从不表示它接受泛型类型(基本上)我完全放弃了redux,现在用普通钩子维护全局状态。事实上,我将很快完全放弃使用最热门的新框架sveltekit的react。我刚刚开始使用react和redux重新构建我公司的应用程序,因为它遵循与Angular相同的模式。我对svelt的了解还不够,所以我没有信心推荐它作为一个框架。我可以使用(action$:any)而不是(action$:ActionsObservable)使它正常工作但这不是完美的解决方案。这实际上是一个非常好的问题,我也希望有一个更好的答案。我最后键入了rootEpic,因为它从不表示它接受泛型类型(基本上),我完全放弃了redux,现在用普通挂钩维护全局状态。事实上,我将很快完全放弃使用最热门的新框架sveltekit的react。我刚刚开始使用react和redux重新构建我公司的应用程序,因为它遵循与Angular相同的模式。我对svelt的了解还不够,所以我没有信心推荐它作为一个框架。类型为“(source:Observable)=>Observable”的参数不能分配给类型为“OperatorFunction”的参数。类型“Observable”不可分配给类型“Observable”。类型“Actions”不可分配给类型“PostAction”。类型“ErrorAction”不可分配给类型“PostAction”。属性“type”的类型不兼容。类型“ActionTypes.ERROR”不可分配给类型“ActionTypes.POSTS”。ts(2345)不是修复我的代码,如果你能在typescript中创建非常基本的可观察redux示例,使用严格类型进行反应,那么它将对我有很大帮助。我在
导出const epic:epic=action$=>
行中遇到以下错误。类型为“(source:Observable)=>Observable”的参数不能分配给类型为“OperatorFunction”的参数。类型“Observable”不可分配给类型“Observable”。类型“Actions”不可分配给类型“PostAction”。类型“ErrorAction”不可分配给类型“PostAction”。属性“type”的类型不兼容。类型“ActionTypes.ERROR”不可分配给类型“ActionTypes.POSTS”。ts(2345)而不是修复我的代码。如果您可以在typescript中创建非常基本的可观察redux示例,并使用严格类型进行反应,那么它将对我有很大帮助。