升级 redux-toolkit 后 createSelector 类型的问题

Issue with createSelector types after upgrading redux-toolkit

redux-toolkit 从 1.5 升级到 1.8 后,我的 none 个自定义选择器不再有效。这是一个例子:

const getToken = createSelector<
  AppState,
  string | null,
  Token | null
>(
  (s: AppState) => (s.tokenResponse ? s.tokenResponse.accessToken : null),
  (t: string | null) => {
    if (t === null) {
      return null;
    }
    try {
      return JwtDecode(t);
    } catch (e) {
      return null;
    }
  }
);

升级后,我的 IDE 抱怨我传递的不是 2 个类型参数,而是 3 个。但是我在文档中找不到任何地方,现在它只接受 2 个类型参数。

删除 string | null(或任何其他参数)也无济于事,唯一有帮助的是保留 createSelector<any, any>(...).

如何确定 createSelector 期望的类型定义?我在哪里可以找到描述了哪两种类型的文档?

类型是推断出来的 - 你不应该手动声明泛型。

随便写

const getToken = createSelector(
  (s: AppState) => (s.tokenResponse ? s.tokenResponse.accessToken : null),
  (t: string | null) => {
    if (t === null) {
      return null;
    }
    try {
      return JwtDecode(t);
    } catch (e) {
      return null;
    }
  }
);

如果您想手动固定 return 类型,请改为在您的选择器函数中声明它:

const getToken = createSelector(
  (s: AppState) => (s.tokenResponse ? s.tokenResponse.accessToken : null),
  (t: string | null): Token | null => {
    if (t === null) {
      return null;
    }
    try {
      return JwtDecode(t);
    } catch (e) {
      return null;
    }
  }
);