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

TypeScript调用无返回值函数报TS2349错误如何解决

错误原因

TS2349报错的核心原因是类型不匹配:你定义的it辅助函数没有返回值(返回类型为void),但在dummytests.ts中你将it()的执行结果赋值给了导出变量check_if15_eqls_15,导致这个变量的实际类型是void,后续在测试入口中把void类型值当作函数调用,自然会触发「void类型不存在调用签名」的错误。
从逻辑上看,你当前实现的it函数在被调用时就会直接执行传入的校验逻辑、打印测试结果,本身不需要额外二次调用。

修复方案

两种改法可以根据自己的测试框架设计需求选择:

方案1:批量导出测试执行入口(适配当前it的执行逻辑)

保留现有it函数的实现,把单测文件里的测试用例统一放到导出的执行函数中,避免提前执行it、也不需要导出void类型的变量:

  1. 修改dummytests.ts:
    // File: dummytests.ts
    import { strict as assert } from 'node:assert';
    import { it } from "src/spec/helper";
    
    // 导出统一的测试执行函数,调用时才会跑所有用例
    export const runDummyTests = () => {
      it("should check if something is true", () => { 
        assert.strictEqual(15, 15); 
      });
      // 后续新增测试用例,直接在函数内追加it()调用即可
    }
    
  2. 修改testRunner.ts,调用统一的测试执行函数:
    // File: testRunner.ts
    import { runDummyTests } from 'src/spec/frontend/dummytests';
    
    console.log("This test harness is for the frontend tests.\n");
    runDummyTests();
    

方案2:改造it函数返回可执行的单测函数

如果你需要把单个测试用例作为独立函数导出、支持单独调用,可以修改it的实现,让它返回包装后的测试执行函数,而不是直接在it内部跑测试逻辑:
修改helper.ts:

//File: helper.ts
type validator = () => void;
export const it = (desc: string, fn: validator) => {
  // 返回可调用的测试函数,调用时才执行校验、打印结果
  return () => {
    try {
        fn();
        console.log("\x1b[32m%s\x1b[0m", `\u2714 ${desc}`);
    } catch (error) {
        console.log("\n");
        console.log("\x1b[31m%s\x1b[0m", `\u2718 ${desc}`);
        console.error(error);
    }
  }
};

这种改法下你原来的dummytests.ts逻辑不需要调整,check_if15_eqls_15会接收到it返回的函数类型值,在入口调用时不会再触发类型错误。

额外注意事项
  • 文件名大小写不一致:你定义的测试用例文件名为dummytests.ts,但导入路径写的是dummyTests,在大小写敏感的操作系统(如Linux)上会直接报模块找不到错误,需要统一文件名和导入路径的大小写。
  • 拼写错误:测试描述里的shoulld多输入了一个字母l,正确拼写为should。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:24:25