如何让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就不会终止进程:
- 在
compilerOptions中添加"checkJs": true,开启JS文件的类型检查(和// @ts-check配合生效) - 设置
"noEmitOnError": false,关闭“有错误就不输出产物”的规则
修改后的tsconfig.json关键配置片段:
{ "compilerOptions": { // 原有其他配置... "checkJs": true, "noEmitOnError": false } }
启动脚本可以保留原有配置,不需要额外添加参数。
额外技巧:针对单个文件/行放宽检查
如果只是个别JS文件或代码行的错误不想处理,可以:
- 在JS文件顶部添加
// @ts-nocheck,关闭整个文件的类型检查 - 在特定错误行上方添加
// @ts-ignore,忽略该行的类型错误
内容的提问来源于stack exchange,提问作者Fabio Sousa
相关产品推荐
相关产品推荐

