TypeScript如何正确声明全局类型?使用时Node无报错崩溃是什么原因?
问题原因及解决方法
首先明确:你遇到的崩溃是TypeScript 编译阶段报错导致进程退出,还没到 Node.js 运行代码的阶段,因此不会抛出运行时错误栈,nodemon 检测到进程异常退出就会输出你看到的崩溃提示。
常见原因及对应解决方式
原因1:
tsconfig.json未正确包含全局声明文件
你的global.d.ts需要被 TS 编译器识别加载才会生效,检查tsconfig.json中的以下配置项:include数组要包含global.d.ts所在的路径,比如存放在项目根目录时配置为:{ "include": ["src/**/*", "global.d.ts"] }- 如果你自定义了
typeRoots配置,需要把全局声明文件所在的目录加入配置,否则 TS 默认只会读取node_modules/@types下的类型定义。
原因2:ts-node 未加载未被引用的全局声明文件
如果你用nodemon + ts-node的组合启动项目,ts-node 默认只会加载被业务代码import引入的文件,没有被任何文件引入的global.d.ts不会被自动加载,导致识别不到AxiosConf类型直接报错退出。
解决方式二选一:- 启动 ts-node 时添加
--files参数,让它自动加载所有tsconfig.json中include配置的文件 - 在项目入口文件顶部添加引入代码:
import './global.d.ts'
- 启动 ts-node 时添加
原因3:存在其他未被捕捉的编译错误
你可以直接在项目根目录执行tsc --noEmit命令,该命令会完整输出所有编译错误,你可以根据具体的错误信息定位问题,比如是否是urlObj本身的类型未定义、或者axios相关类型未安装等。
补充验证方式
你可以先把全局声明改成局部引入的方式测试:把 AxiosConf 的类型定义从 global.d.ts 移到用到该类型的业务文件顶部,如果此时项目能正常启动,就可以100%确认是全局声明文件未被正确加载的问题。
内容的提问来源于stack exchange,提问作者guygrinberger
相关产品推荐
相关产品推荐

