TypeScript联合类型参数不兼容问题求助
TypeScript类型兼容问题解答
这不是TypeScript的Bug,而是它的类型安全检查机制在起作用。
你的onAdd类型定义要求对应的函数必须能接受Person | Person[]两种类型的参数,但你传入的函数只声明接受Person[]。如果调用方给onAdd传入单个Person对象,你的函数里执行item.map()就会直接报错——因为单个Person没有map方法。TypeScript提前阻止了这种潜在的运行时错误,所以抛出TS2322。
解决办法:
- 让函数兼容两种参数类型:在函数内部先判断参数是否为数组,分别处理
onAdd={(item: Person | Person[]) => { const persons = Array.isArray(item) ? item.map(el => el.name) : [item.name]; }}
- 修改类型定义(如果业务允许):如果确定
onAdd只会被传入Person[],直接调整类型
onAdd?: (person: Person[]) => void;
- 类型断言(不推荐):如果你能100%保证调用时不会传入单个
Person,可以用断言跳过检查,但这会失去类型安全保护
onAdd={(item: Person[]) => { const persons = item.map(el => el.name); } as (person: Person | Person[]) => void}
内容的提问来源于stack exchange,提问作者Rollin
相关产品推荐
相关产品推荐

