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

如何让tsnd在含@ts-check的JS文件中允许带错误编译?

使用tsnd时保留JS文件@ts-check提示但不终止编译的解决方案

问题背景

我正在将后端项目迁移到tsnd搭配TypeScript的环境,当前tsconfig.json配置如下:

{
  "compilerOptions": {
    "baseUrl": "src",
    "paths": {
      "~/*": ["*"]
    },
    "declaration": true,
    "esModuleInterop": true,
    "module": "CommonJS",
    "moduleResolution": "node",
    "noFallthroughCasesInSwitch": true,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "sourceMap": true,
    "strict": true,
    "strictBindCallApply": true,
    "strictFunctionTypes": true,
    "strictNullChecks": true,
    "strictPropertyInitialization": true,
    "target": "ES2019",
    "outDir": "dist",
    "types": ["node"],
    "useUnknownInCatchVariables": false,
    "allowJs": true,
    "resolveJsonModule": true
  },
  "include": ["src"],
  "exclude": []
}

项目启动脚本为:

"dev": "tsnd --clear -r tsconfig-paths/register src/index.ts"

但给JS文件添加// @ts-check后,tsnd会因为TypeScript编译错误直接终止进程,我希望保留类型检查的提示,但不想让这些错误打断项目的启动和运行。

解决方案

方案1:使用tsnd的--transpile-only参数(简单直接)

添加这个参数后,TypeScript会只做代码转译,跳过所有类型检查(包括TS文件和JS文件的@ts-check),这样就不会因为类型错误终止进程。修改后的启动脚本如下:

"dev": "tsnd --clear --transpile-only -r tsconfig-paths/register src/index.ts"

注意:这个方式会同时关闭TS文件的严格类型检查,如果需要保留TS文件的类型检查,建议用方案2。

方案2:修改tsconfig.json配置(精准控制)

通过调整TypeScript的编译规则,让它检查JS文件的类型问题,但不会因为这些错误停止输出产物,这样tsnd就不会终止进程:

  1. 在compilerOptions中添加"checkJs": true,开启JS文件的类型检查(和// @ts-check配合生效)
  2. 设置"noEmitOnError": false,关闭“有错误就不输出产物”的规则

修改后的tsconfig.json关键配置片段:

{
  "compilerOptions": {
    // 原有其他配置...
    "checkJs": true,
    "noEmitOnError": false
  }
}

启动脚本可以保留原有配置,不需要额外添加参数。

额外技巧:针对单个文件/行放宽检查

如果只是个别JS文件或代码行的错误不想处理,可以:

  • 在JS文件顶部添加// @ts-nocheck,关闭整个文件的类型检查
  • 在特定错误行上方添加// @ts-ignore,忽略该行的类型错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:40:37