typescript - redux-actions createAction 默认参数在 PayloadCreator 函数中(typeScript)

标签 typescript redux redux-actions

如果我生成这样的操作:

export const updateParticularObjectValue = createAction(
    UPDATE_PARTICULAR_VALUE,
    (id: string, amount: number, reason: string = 'default') => { 
        return { id, value: amount, reason }; 
    },
);

出于某种原因,我的 IDE(实际上是我的 typescript 编译器)提示说,当我显式传递第三个参数时,调用操作创建者只需要两个参数。我希望创建者可以选择使用第三个参数...有没有办法使用 redux-actions createAction 函数来做到这一点,或者我是否需要手动构建操作创建者?

附注-- 此语法也会导致相同的结果:

export const updateParticularObjectValue = createAction(
    UPDATE_PARTICULAR_VALUE,
    (id: string, amount: number, reason?: string) => { 
        return { id, value: amount, reason: reason || 'default' }; 
    },
);

似乎以任何方式使第三个参数可选都不会在 typescript 中翻译——它被视为不存在,并且对函数的调用禁止包含它。有办法解决这个问题吗?

P.P.S。 -- 如果你可以“欺骗” typescript 编译器(在我的例子中,通过在 React 组件中使用“connect”时在组件的 Props 类型中定义函数接口(interface)),它可以正常工作,只是在以下情况下无法通过编译器的气味测试:显式调用它——似乎没有真正的原因应该发生这种情况。

P.P.P.S。 ——至此,我已经找到了一个可行的解决方案。然而,我仍然对为什么这是 createAction 的 typescript 实现的限制感兴趣,以及是否有任何替代解决方案对于这种情况会更好/更智能。一个好的解释对我自己以及其他人来说都是有教育意义的。

最佳答案

您可以使用箭头函数 return createAction 函数执行类似的操作:

interface ActionProps {
    id: string;
    amount: number;
    reason: string;
}

export const updateParticularObjectValue = (props: ActionProps) => (createAction('UPDATE_PARTICULAR_VALUE', {
    id: props.id,
    value: props.amount,
    reason: props.reason
}));

关于typescript - redux-actions createAction 默认参数在 PayloadCreator 函数中(typeScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49482096/

相关文章:

TypeScript:如何键入返回函数的返回类型

typescript - React-redux 与 TypeScript Hook

reactjs - React Redux 意外 token ,预期 ","

typescript - 在 typescript 中使用 redux-actions、redux-thunk 和 redux-promise-middleware

javascript - React redux,操作有效负载无法在 try/catch block 中看到变量

angular - typescript 类型 BeforeInstallPromptEvent

reactjs - Webpack 4,babel 7,react, typescript : Unexpected token,预期的 ","

javascript - 扩展 TypeScript Map 以限制数据类型

javascript - 测试 'isChecked' 属性是否已更改

ios - 何时、为何以及如何在 redux 中使用 Action Creators?