redux 如果有效负载为部分,则TS不显示错误

nwo49xxi  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(141)

如果我将有效负载设置为Partial,为什么没有错误?我可以看到TS只检查第一个值,而不检查第二个值。

type UserState = {
  user: User | null;
  loading: boolean;
  error: Error | null
}

type UserAction = {
  type: typeof SET_USER;
  payload: Partial<UserState>;
};

 type ActionUser = SetDetailedUserAction;

const fetchUser =
  (
    id: string,
  ): ThunkAction<
    Promise<Any>,
    RootState,
    any,
    ActionUser
  > =>
  async (dispatch) => {
    
dispatch({
      type: SET_USER,
      payload: { loading: true, ffff: false }, /// no error for `ffff`
    });
}

通常的TS在这种情况下显示错误,我在Redux ThunkAction类型中找不到任何问题。也许有人看到过类似的评论问题?

falq053o

falq053o1#

~~我没有看到您的dispatch以任何方式被键入为只接受特定操作-所以它可能只是接受所有内容。~~(啊,看到了。这只是不再是一个常见的模式,所以我错过了)
TypeScript是Duck-Typed。您想要分派符合UserAction形体的项目-所以它至少有***这些属性。TypeScript完全可以让您在其上加入额外的属性。在某些极端情况下,它会抱怨,但一般而言,它会接受。
也就是说,你可能不应该这样做--这是Redux的一种非常过时的风格,现在你不会做手工编写动作类型这样的事情。Modern Redux(2019年以来的官方推荐)大约是代码的1/4。
请阅读Why Redux Toolkit is How To Use Redux Today并遵循the official Redux tutorial

相关问题