You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:30:56