Argument [JSONObject] is of type Model or Map but is not assignable from the act

本文介绍如何在后端开发中使用@RequestBody注解来接收前端传递过来的JSON格式的数据,并解释了其基本用法。
/**
* 参数前加上@RequestBody即可
*/
@RequestBody JSONObject json
你遇到的错误: ``` Argument of type 'any' is not assignable to parameter of type 'never' ``` 这是一个 **TypeScript 编译时报错**,通常出现在类型推导出问题、数组操作或函数传参时。 --- ### ❌ 错误原因分析 这个错误的核心是: > 你试图把一个值(即使是 `any` 类型)传递给一个期望类型为 `never` 的参数。 而 `never` 类型在 TypeScript 中表示: - **没有任何值可以属于这个类型** - 它用于“不可能发生”的场景,比如: ```ts function error(): never { throw new Error("Oops"); } ``` 但当你看到这个错误出现在 **数组 push、函数调用、泛型等场景**,往往是以下几种常见情况之一。 --- ## ✅ 常见场景与解决方案 ### 🟡 场景 1:向类型为 `never[]` 的数组 `push` 数据 ```ts let arr = []; // 类型被推导为 never[] arr.push('hello'); // ❌ Error: Argument of type 'string' is not assignable to parameter of type 'never' ``` #### 🔍 原因 TypeScript 看到空数组且没有类型注解,会将 `arr` 推导为 `never[]` —— 意思是:“这个数组不能包含任何元素”。 #### ✅ 解决方案:显式指定类型 ```ts let arr: string[] = []; // 或 let arr = [] as string[]; arr.push('hello'); // ✅ OK ``` 或者初始化时带一个值帮助推导: ```ts let arr = ['']; // string[] ``` --- ### 🟡 场景 2:React 中 state 初始化错误 ```tsx const [items, setItems] = useState([]); // 类型推导为 never[] items.push(newItem); // ❌ Error ``` #### ✅ 正确写法: ```tsx const [items, setItems] = useState<string[]>([]); // 或更复杂的类型 const [items, setItems] = useState<{ id: number; name: string }[]>([]); ``` 然后使用不可变更新: ```tsx setItems([...items, newItem]); ``` > ⚠️ 不要直接 `items.push()`,React 中状态应视为只读。 --- ### 🟡 场景 3:泛型函数中类型未正确约束 ```ts function process<T>(value: T, arr: T[]) { arr.push(value); } const myArr = []; // 推导为 never[] process('test', myArr); // ❌ Error: 'string' not assignable to 'never' ``` #### ✅ 解决方案:提前定义数组类型 ```ts const myArr: string[] = []; process('test', myArr); // ✅ OK ``` --- ### 🟡 场景 4:条件逻辑导致类型缩小到 `never` ```ts function handleInput(input: string | number) { if (typeof input === 'string') { // 处理字符串 } else if (typeof input === 'number') { // 处理数字 } else { // 这里 input 的类型是 `never` console.log(input); // ❌ Type 'never' — 因为所有情况都覆盖了 } } ``` 这是合法的 `never` 使用方式,不是错误。但如果编译器报错在这里用了 `input`,说明你的逻辑可能有问题。 --- ## ✅ 总结:如何修复 `'any' is not assignable to 'never'` | 原因 | 修复方法 | |------|---------| | 数组未声明类型,推导成 `never[]` | 显式标注类型:`string[]`, `number[]` 等 | | React state 初始化为空数组 | 使用 `useState<Type[]>([])` | | 函数参数期望 `never[]`(罕见) | 检查是否逻辑错误或类型定义错误 | | 泛型上下文类型无法推导 | 提前指定变量类型 | --- ### ✅ 最佳实践建议 ```ts // ❌ 避免这样 let arr = []; arr.push(1); // ✅ 推荐这样 let arr: number[] = []; arr.push(1); // ✅ 或者 let arr = [] as string[]; // ✅ React 中 const [list, setList] = useState<{id: number; text: string}[]>([]); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值