我有以下代码:
<CriterionCheckbox
key={exp.value}
checked={expandedFilters.experience.includes(exp.value)}
title={exp.label}
width='25%'
onChange={() =>
handleExpandedFilter(
exp.value,
expandedFilters.experience as number[],
'experience',
)
}
/>
我也有这种类型的类型,它是在上面的代码中的第3个字符串中设置的。
ExpandedFiltersState = {[key:string]:string |片刻[] |数[] }
然后出现以下错误:
类型'number'的参数不能分配给类型的参数 “从不”
为什么?我该如何避免呢?
答案 0 :(得分:1)
考虑以下更简单的示例:
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或number,则大于或等于时,include都必须是Moment&number的并集。
现在,让我们看一下您的示例:
expandedFilters.experience
// type is string | Moment[] | number[]
Typescript再次尝试合并元素类型。 由于字符串不是数组,所以不可能。
因此,它将searchElement的类型推断为从不。