Next.js中TypeScript报错:any类型无法赋值给never类型参数.ts(2345)
解决TypeScript错误:Argument of type 'any' is not assignable to parameter of type 'never'
问题根源
你的代码存在两个核心问题:
- 定义的
PassengerData接口不完整,缺少实际使用的name、surName等属性,导致TypeScript无法正确推断类型; newpassengerdata和selectedList未显式指定类型,TypeScript自动推断为never[]或any[],引发类型不匹配错误。
分步解决方案
完善PassengerData接口
补充所有业务中用到的属性,确保类型覆盖全面:interface PassengerData { id: number; name: string; surName: string; namePerfix: 1 | 0; // 对应性别判断的1/0值 docId: string; nationalId: string; birthDate: string; expireDate: string; }给newpassengerdata显式指定类型
避免TypeScript自动推断错误类型,直接声明变量类型:// 假设passdata.data是PassengerData数组,若passdata是API返回值,建议同时给passdata定义类型 let newpassengerdata: PassengerData[] | undefined = passdata?.data?.filter((i: PassengerData) => i.name.includes(inputsearch) || i.surName.includes(inputsearch) );指定selectedList的类型
由于它存储的是乘客id(数字类型),初始化时明确类型:const [selectedList, setselectedList] = useState<number[]>([]);简化filter和map的类型标注
变量类型明确后,无需再给回调参数手动指定any或重复指定接口,TypeScript会自动推断:{newpassengerdata?.filter(i => selectedList.indexOf(i.id) < 0) ?.slice(pageVisited, pageVisited + postPerPage) ?.map((i, index) => { // 原JSX代码保持不变,i会自动推断为PassengerData类型 })}优化表单值的类型(可选)
为values.passengers和values.airTraveler定义对应接口,彻底消除@ts-ignore注释:interface PassengerFormData { id: number; namePerfix: 1 | 0; nationalId: string; name: string; surName: string; birthDate: string; docId: string; expireDate: string; } // 使用useForm时指定类型 const { values } = useForm<{ airTraveler: PassengerFormData[]; passengers: PassengerFormData[]; }>();
效果验证
完成以上修改后,TypeScript可以正确推断所有变量的类型,never类型错误会自动消失,同时代码的类型安全性也会提升。
内容的提问来源于stack exchange,提问作者alireza
相关产品推荐
相关产品推荐

