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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:10:04