升级redux工具包后出现createSelector类型问题



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

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;
}
}
);

如果您想手动固定返回类型,请在选择器函数中声明:

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;
}
}
);

最新更新