如果我生成这样的操作:
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/