升级 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;
}
}
);
将 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;
}
}
);