使用push推送数据时遇类型错误:any类型无法赋值给never类型
解决Argument of type 'any' is not assignable to parameter of type 'never'错误
这个错误本质是TypeScript推断出你要推送数据的目标(数组、Subject这类可推送容器)的类型为never——意味着它不允许存入任何类型的值,但你传入了any类型的数据,类型不匹配导致报错。
常见解决方案:
显式指定容器的类型
如果你用的是数组,声明时明确指定它的元素类型:// 先定义你要存储的数据结构 type PushDataType = { id: number; content: string; // 其他字段根据你的实际需求补充 }; // 声明数组时指定类型 const targetArray: PushDataType[] = []; // 现在push对应类型的数据就不会报错 targetArray.push({ id: 1, content: "测试数据" });如果是RxJS的
Subject(这类常用作事件推送的容器),需要指定泛型类型:import { Subject } from 'rxjs'; // 错误写法:未指定泛型,Subject默认是Subject<never> // const dataSubject = new Subject(); // 正确写法:指定泛型类型 const dataSubject = new Subject<PushDataType>(); // 用next方法推送数据(Subject的推送方法是next,不是push) dataSubject.next({ id: 1, content: "测试数据" });避免使用
any类型
尽量不要让你的输入数据是any类型,要么定义明确的类型,要么用unknown代替any,之后再做类型校验:const targetArray: unknown[] = []; const inputData: unknown = getInputData(); // 假设getInputData返回unknown // 先做类型校验再推送 if (typeof inputData === 'object' && inputData !== null && 'id' in inputData) { targetArray.push(inputData); }临时应急:类型断言
如果你确定输入数据的类型是安全的,可以用类型断言跳过TypeScript的检查(不推荐长期使用,会失去类型校验的意义):targetArray.push(inputData as PushDataType);
内容的提问来源于stack exchange,提问作者Sahana S
相关产品推荐
相关产品推荐

