已在global.d.ts声明users属性 ts-node运行仍报Global类型不存在该属性
问题原因
- ts-node运行时默认不会自动加载项目内自定义的
.d.ts类型声明文件,只会编译tsconfig.json配置的include范围内的文件。VSCode智能提示会扫描整个工作区的声明文件,所以本地编辑时无报错,但ts-node编译阶段没有读取到global.d.ts的定义,因此识别不到global上的users属性。 - 新版TypeScript的全局类型同时兼容NodeJS的
Global接口和标准globalThis,仅声明NodeJS.Global的扩展没有同步覆盖globalThis的类型,也会触发校验报错。
解决方法
1. 补全全局类型声明
修改global.d.ts内容,同时覆盖NodeJS.Global和全局变量声明,末尾添加export {}将文件标记为模块,避免全局声明失效:
// global.d.ts import type { User } from "./src/server/classes/User"; declare global { namespace NodeJS { interface Global { users: Record<string, User> } } var users: Record<string, User>; } export {}
2. 调整tsconfig.json配置
将自定义声明文件加入编译范围,同时指定类型根目录:
{ "compilerOptions": { // 保留你原有的其他配置 "typeRoots": ["./node_modules/@types", "./"] }, "include": ["global.d.ts", "src/**/*"], // 新增ts-node专属配置,强制加载include内的所有文件 "ts-node": { "files": true } }
3. 验证生效
配置完成后直接运行原有ts-node启动命令即可,无需额外加参数。如果还是报错,可以手动执行带参数的启动命令排查:
ts-node --files src/server/index.ts
内容的提问来源于stack exchange,提问作者Sharif Velásquez Alzate
相关产品推荐
相关产品推荐

