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