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

导出TypeScript类时遇Unexpected identifier错误,求排查方案

问题排查:TypeScript类在Mocha测试中出现Unexpected identifier错误

我有一个名为Polynomial的TypeScript类,想要将其制作成npm模块,用Mocha编写测试脚本验证时,直接require了Polynomial.ts文件,执行npm test时,在类的private coefMap: Map<string, string> = new Map();行出现Unexpected identifier错误。相关代码及配置如下:

测试脚本(Polynomial.test.js)

const Polynomial = require('./Polynomial.ts'); 
const assert = require('assert').strict;

describe("First test", function() {
    it("test", function() {
        let p = new Polynomial();
        assert(p.equals(new Polynomial("0")));
    });
});

TypeScript类(Polynomial.ts)

class Polynomial {
  private coefMap: Map<string, string> = new Map();  // <--- 报错行
  // ...
}
module.exports = Polynomial;

package.json

{
  "name": "multivariate-polynomial",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "mocha Polynomial.test.js"
  }
}

tsconfig.json

{
    "compilerOptions": {
      "target": "es5",
      "lib": [
        "dom",
        "dom.iterable",
        "esnext"
      ],
      "module": "commonjs",
      "declaration": true,
      "outDir": "./lib",
      "strict": true
    }
}

错误原因

  • Node.js和Mocha默认只能解析原生JavaScript语法,无法识别TypeScript专属特性(比如private访问修饰符、Map<string, string>类型注解)。直接用require加载未编译的.ts文件,会被当作JS解析,自然触发语法错误。
  • 现有配置虽指定了TS编译输出目录,但测试流程没有先执行TS编译,也未配置Mocha支持TS文件的直接运行。

解决方案

方案一:先编译TS代码再执行测试

  1. 修改package.json的脚本,新增编译命令并让测试依赖编译结果:
{
  "scripts": {
    "build": "tsc",
    "test": "npm run build && mocha ./lib/Polynomial.test.js"
  }
}

注意:如果测试脚本还是.js格式,需要把测试里的require('./Polynomial.ts')改成require('./lib/Polynomial.js');更规范的做法是把测试文件改成.ts格式,编译后会自动输出到lib目录。

  1. 调整TypeScript类的导出方式,符合TS规范:
// Polynomial.ts
export class Polynomial {
  private coefMap: Map<string, string> = new Map();
  // ...
}

方案二:配置Mocha直接支持TypeScript(无需提前编译)

  1. 安装依赖包:
npm install --save-dev ts-node typescript @types/mocha @types/node
  1. 修改package.json的测试脚本:
{
  "scripts": {
    "test": "mocha -r ts-node/register Polynomial.test.ts"
  }
}
  1. 将测试脚本改为TS格式(Polynomial.test.ts),并调整导入逻辑:
// Polynomial.test.ts
import { Polynomial } from './Polynomial';
import assert from 'assert/strict';

describe("First test", function() {
    it("test", function() {
        let p = new Polynomial();
        assert(p.equals(new Polynomial("0")));
    });
});

内容的提问来源于stack exchange,提问作者Daniel Zufrí Quesada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:15:34