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

使用ts-node运行TS代码时super调用报错:类构造函数需用new调用

问题排查与解决方案

核心原因

你的错误本质是父类B(或它继承的Connection类)并非标准ES6 Class语法实现,而是基于传统构造函数+原型链的方式定义的,或是被编译工具转译成了非ES6兼容的代码。当ES6子类用super()调用这类父类时,就会触发cannot be invoked without 'new'错误——因为ES6 Class的super()调用规则和传统构造函数的调用方式不匹配。

具体排查与修复步骤

  1. 检查父类B的定义

    • 确认B是否直接继承了Connection,且Connection的实现是否为ES6 Class:
      • 若Connection是传统构造函数(比如function Connection() {}这种形式),ES6 Class无法直接继承它,需改用传统构造函数的继承方式:
        function A(endpoint: string) {
          Connection.call(this, endpoint);
        }
        A.prototype = Object.create(Connection.prototype);
        A.prototype.constructor = A;
        
      • 若B是你自己的代码,检查是否被TypeScript编译成了非ES6的构造函数(比如开启了downlevelIteration或其他降级编译选项),确保父类的编译输出也是ES6 Class。
  2. 检查TypeScript编译配置的其他关键选项
    除了target: ES6,还要确认以下配置:

    • module:设为CommonJS(Node.js环境默认)或ES6,避免模块系统不兼容导致的类加载问题;
    • esModuleInterop:设为true,处理第三方库的模块导出格式问题;
    • skipLibCheck:如果报错来自第三方库,设为true跳过库的类型检查,避免类型定义干扰编译结果。
      示例tsconfig.json片段:
    {
      "compilerOptions": {
        "target": "ES6",
        "module": "CommonJS",
        "esModuleInterop": true,
        "skipLibCheck": true
      }
    }
    
  3. 清理编译缓存
    ts-node可能缓存了旧的编译结果,执行以下命令清理缓存后再运行:

    npx ts-node --clear-cache
    
  4. 直接编译成JS再运行
    跳过ts-node,先编译TypeScript为JS再执行,排查是否是ts-node的编译问题:

    tsc --project tsconfig.json main.ts
    node main.js
    

额外提示

如果是使用第三方库的Connection类,确认库的版本是否和其他正常运行的环境一致——不同版本的库可能对Class的实现有差异,比如旧版本用传统构造函数,新版本改用ES6 Class。

内容的提问来源于stack exchange,提问作者Alaska

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:05:30