reactjs - 为什么 TS 在我的情况下会出现以下错误:“数字”类型的参数不可分配给“从不”类型的参数?
问题描述
我有以下代码:
<CriterionCheckbox
key={exp.value}
checked={expandedFilters.experience.includes(exp.value)}
title={exp.label}
width='25%'
onChange={() =>
handleExpandedFilter(
exp.value,
expandedFilters.experience as number[],
'experience',
)
}
/>
我也有这种类型,它是用上面代码中的第三个字符串设置的。
ExpandedFiltersState = { [键:字符串]:字符串 | 时刻[] | 数字[] }
我收到以下错误:
“数字”类型的参数不能分配给“从不”类型的参数
为什么?我怎样才能避免它?
解决方案
考虑以下更简单的示例:
interface Moment {
prop1: string;
}
const z: Moment[] | number[] = [];
z.includes(1)
// TS2345: Argument of type '1' is not assignable to parameter of type 'Moment & number'.
// Type '1' is not assignable to type 'Moment'.
// Signature of includes in this case:
Array<T>.includes(
searchElement: Moment & number,
fromIndex: number | undefined): boolean
请注意,如果 z 可以是 Moment 或数字,那么对于在任何一种情况下都成功的包含,searchElement 必须是 Moment 和数字的并集
现在,让我们看一下您的示例:
expandedFilters.experience
// type is string | Moment[] | number[]
Typescript 再次尝试合并元素类型。由于字符串不是数组,所以这是不可能的。
因此,它将 searchElement 的类型推断为 never。
推荐阅读
- python - 重新输入重定向 URL 时获取 'spotipy.oauth2.SpotifyOauthError: Bad Request'
- java - 带 8 位数字的模幂运算
- django - 如何知道哪个用户添加了另一个用户?
- python - 如何阻止在python中键入按键
- appium - org.openqa.selenium.NoSuchSessionException:会话终止或未启动
- python - 使用不同线程连接不同数据库后是否关闭部分连接会影响其他线程
- c# - Unity中的基本比较和分配问题
- android - OpenGLES基于触摸绘制箭头
- javascript - 等价于“evaluateOnNewDocument”
- kendo-grid - 如何在一列中编辑两个字段并像剑道网格中的一个字段一样显示它们?