首页/新闻资讯/正文详情

TypeGraphQL 安装与 TypeScript 环境配置指南:依赖安装、tsconfig 与前端 Shim 全解

发布时间:2026/9/26 2:53:02 来源:云帆数科 栏目:资讯中心
TypeGraphQL 安装与 TypeScript 环境配置指南:依赖安装、tsconfig 与前端 Shim 全解
后端GraphQLAPI设计【免费下载链接】type-graphqlCreate GraphQL schema and resolvers with TypeScript, using classes and decorators!项目地址https://gitcode.com/gh_mirrors/ty/type-graphql点击查看免费下载本篇指南聚焦于 type-graphql 项目当前仓库版本2.0.0-rc.4的安装与工程化配置。读完本文你将掌握完整的依赖安装清单含graphql、graphql-scalars等 peer dependencies 与reflect-metadata反射垫片、tsconfig.json中装饰器元数据与 ES2021 目标编译选项的精确配置以及在前端浏览器场景下使用shim复用类型类的高级做法为后续基于装饰器构建 GraphQL schema 与 resolver 打下可运行的工程基础。安装前的环境准备在开始安装之前首先确认开发环境已具备 Node.js 与 npm。从当前仓库的 package.json 可以看到TypeGraphQL 声明的运行时要求为node 20.11.1因此建议使用满足该版本要求的 Node.js LTS 版本。安装文档docs/installation.md也明确指出 TypeGraphQL 面向 Node.js LTS 及最新的稳定版设计并在运行时使用 ES2021 及以后的语言特性。包依赖安装主包与 peer dependenciesTypeGraphQL 本身不会替你安装graphql而是将它们声明为 peer dependencies需要你显式安装。执行以下命令一次性安装主包与两个 peer dependenciesnpm install graphql graphql-scalars type-graphqlgraphqlGraphQL 规范与执行引擎本体schema、类型解析、查询执行全部依赖它。graphql-scalars提供额外的常用标量类型如DateTime、Timestamp等方便在类型定义中直接使用。type-graphql项目主包提供ObjectType、Field、Query、Mutation、Resolver等装饰器与buildSchema等工具函数。从仓库的 package.json 可以看到完整的 peerDependencies 声明peerDependencies: { class-validator: 0.14.3, graphql: ^16.12.0, graphql-scalars: ^1.25.0 }, peerDependenciesMeta: { class-validator: { optional: true } }其中graphql的版本约束为^16.12.0。仓库在运行时会做严格的版本校验位于 src/utils/graphql-version.ts 的ensureInstalledCorrectGraphQLPackage函数使用semver检查当前安装的graphql版本是否满足^16.12.0若不满足会抛出 UnmetGraphQLPeerDependencyError错误信息会明确给出当前版本与期望版本帮助你快速定位问题。此外class-validator虽然也被声明为 peer dependency但它被标记为 optional——只有在需要使用Length、Min、Max等自动字段校验装饰器时才需要安装它。安装命令为npm install class-validator安装 reflect-metadata 反射垫片装饰器依赖 ES 的反射元数据 APIReflect.metadata()而 Node.js 原生并不内置这一 API因此必须安装一个 polyfill垫片npm install reflect-metadata # 或 npm install core-js两者任选其一即可reflect-metadata是专门针对Reflect.metadata()的轻量垫片core-js则提供了更全面的 ES 特性填充其中包含features/reflect。当前仓库的 devDependencies 中使用的正是reflect-metadata0.1.13见 package.json。垫片必须在入口文件的最顶部、在使用/导入type-graphql或任何 resolver 之前导入import reflect-metadata; // 或 import core-js/features/reflect;如果遗漏这一步运行时会在构建 schema 或解析元数据时抛出 ReflectMetadataMissingError错误信息会直接提示请阅读安装说明也就是本篇指南。安装完成后快速验证安装完成后可以通过以下命令验证安装结果与 Node 运行时版本node -v # 确认 Node.js 版本满足 20.11.1 npm -v # 确认 npm 可用 npm ls graphql graphql-scalars type-graphql reflect-metadatanpm ls会列出上述包的安装层级与版本若存在版本冲突会明确提示便于及时处理。TypeScript 编译配置tsconfig.json装饰器相关的两个核心开关TypeGraphQL 依靠 TypeScript 装饰器与设计类型元数据来完成从类到 GraphQL schema的映射因此必须在项目的tsconfig.json中开启以下两个选项{ compilerOptions: { emitDecoratorMetadata: true, experimentalDecorators: true } }两个选项缺一不可experimentalDecorators启用 TypeScript 的实验性装饰器语法支持没有它装饰器代码会直接编译报错emitDecoratorMetadata让编译器在装饰器代码中自动注入设计类型元数据design:type等TypeGraphQL 正是通过这一元数据在运行时推断字段类型从而免去大量显式类型标注。以仓库自身的构建配置 tsconfig.cjs.json 与 examples/tsconfig.json 为例examples 的配置在继承公共配置的基础上显式开启了emitDecoratorMetadata: true这正是编译仓库自带示例所必需的开关。你可以对照 examples/tsconfig.json 查看真实项目的最小配置。target 目标版本ES2021TypeGraphQL 源码使用了 ES2021 的语言特性因此编译目标不能低于es2021{ compilerOptions: { target: es2021 } }如果 Node.js 版本支持更新的标准如 ES2022也可以将target设置为更新的版本完全没问题。最小可用 tsconfig.json 完整示例综合以上全部要求一个最小的、可直接跑通 TypeGraphQL 项目的tsconfig.json如下{ compilerOptions: { target: es2021, module: commonjs, experimentalDecorators: true, emitDecoratorMetadata: true } }需要说明的是module选项的具体取值取决于你的模块体系选择使用 CommonJSNode.js 传统默认时设为commonjs即可若项目采用 ESM请参阅下文ESM 项目配置一节。仓库自身的根 tsconfig.json 展示了更完整的生产级配置参考——它额外开启了strict、esModuleInterop、skipLibCheck等严格编译选项其中target: es2021与experimentalDecorators: true均与本文一致可作为工程化配置的进阶参考。配置完成后如何验证将上述配置写入项目的tsconfig.json后运行npx tsc --noEmit若装饰器与元数据相关配置有误编译器会立即报错如experimental support for decorators相关提示此时请对照上面的配置逐项检查。ESM 项目的安装配置从仓库的 docs/esm.md 可以了解到自v2.0.0起 TypeGraphQL 已兼容 ECMAScript Modules。如果你的项目使用 ESM除了上文的基础配置外还需额外调整两处tsconfig.json中设置module与moduleResolution为NodeNext{ compilerOptions: { target: es2021, module: NodeNext, moduleResolution: NodeNext, experimentalDecorators: true, emitDecoratorMetadata: true } }package.json中设置type: module{ type: module }本地文件导入必须使用.js后缀即使源码是.tsimport { MyResolver } from ./resolvers/MyResolver.js;这与 TypeScript 在NodeNext模块解析下的 ESM 导入规则一致可以让import的type-graphql包在 ESM 项目中正常工作。前端场景使用 decorator shim 复用类型类TypeGraphQL 是一个面向 Node.js 的框架无法直接在浏览器环境中运行。但有时我们希望在浏览器端复用已经用装饰器标注的类例如带class-validator装饰器的 args/input 类或带有实用方法的 object type 类。直接打包通常会出现类似ERROR in ./node_modules/fs.realpath/index.js或utils1_promisify is not a function的错误。解决方案是使用仓库提供的decorator shim它把全部装饰器替换为空实现dummy decorators在浏览器端保留类的可复用性同时避免把整个 TypeGraphQL 运行时打进前端包显著减小打包体积。仓库中的实现位于 src/shim.ts并作为独立的子路径导出见 package.json 中的./shim导出同时 package.json 也将其声明为browser字段指向的入口。根据前端框架的不同配置方式有两种Webpack 系CRA 等在 webpack 配置中加入NormalModuleReplacementPlugin将type-graphql替换为type-graphql/shimmodule.exports { // ... Rest of Webpack configuration plugins: [ // ... Other existing plugins new webpack.NormalModuleReplacementPlugin(/type-graphql$/, resource { resource.request resource.request.replace(/type-graphql/, type-graphql/shim); }), ]; }Angular / Next.js 等 TypeScript 编译器场景在tsconfig.json的paths中直接映射到 shim 的.ts源文件Angular AoT 编译器要求提供完整的*.ts文件{ compilerOptions: { baseUrl: ., paths: { type-graphql: [./node_modules/type-graphql/build/typings/shim.ts] } } }在 Next.js 场景下由于服务端预渲染SSR在开发模式会跳过webpack: {}配置建议同样采用上述paths映射方式处理客户端打包。若使用该方式还需要安装tsconfig-paths并启用运行时注册npm install -D tsconfig-pathsNODE_OPTIONS-r tsconfig-paths/register # 在环境变量中启用关于浏览器场景 shim 的更多细节包括 Cypress 场景如何复用 webpack 插件方案可以参阅仓库文档 docs/browser-usage.md。安装完成后的下一步完成以上安装与配置后你的工程就已具备了运行 TypeGraphQL 的全部前置条件。接下来可以参考仓库文档 docs/getting-started.md 动手创建第一个示例用ObjectType()定义Recipe类型用Resolver/Query/Mutation定义查询与变更操作最后通过buildSchema生成可执行的 GraphQL schema构建 schema 的完整说明见 docs/bootstrap.md。仓库还提供了大量可直接运行验证的示例工程位于 examples 目录如simple-usage、automatic-validation、middlewares-custom-decorators等每个示例都包含配套的tsconfig.json与完整的类型、resolver 代码可以作为检验本地安装配置是否正确的最快途径将任一示例中的包依赖与 tsconfig 配置与你的工程对比再运行npx tsc --noEmit与示例的入口文件即可确认整套环境链路reflect-metadata 垫片、peer dependencies、装饰器元数据是否就绪。常见问题速查现象可能原因解决方式报错 Looks like youve forgot to provide experimental metadata API polyfill未安装/未导入reflect-metadata安装并在入口文件顶部import reflect-metadata;报错 use an incorrect version of the graphql package本地graphql版本不满足^16.12.0升级graphql至满足要求的版本装饰器编译报错未开启experimentalDecorators在tsconfig.json中开启类型推断缺失、schema 字段类型异常未开启emitDecoratorMetadata在tsconfig.json中开启浏览器打包报fs.realpath/promisify相关错误前端误打包完整 TypeGraphQL 运行时改用type-graphql/shim见上文 shim 一节赞分享后端GraphQLAPI设计【免费下载链接】type-graphqlCreate GraphQL schema and resolvers with TypeScript, using classes and decorators!项目地址https://gitcode.com/gh_mirrors/ty/type-graphql点击查看免费下载相关推荐geektime-nginx高级技巧Websocket代理与HTTP/2配置详解geektime nginx高级技巧Websocket代理与HTTP/2配置详解 geektime nginx是极客时间《Nginx核心知识100讲》的配置文Apache MXNet mxnet-cu110 包安装指南CUDA 11.0 环境下 PyPI 安装、前置依赖与构建配置详解Apache MXNet mxnet cu110 包安装指南CUDA 11.0 环境下 PyPI 安装、前置依赖与构建配置详解 Apache MXNet 以人工智能深度学习机器学习Android 开发者的一天用柚坛工具箱NT把刷机、调试和设备维护串成一条流水线Android 开发者的一天用柚坛工具箱NT把刷机、调试和设备维护串成一条流水线 如果你也曾经历过这样的早晨电脑上开着四五个终端窗口一边敲着 fastbo桌面应用开发工具上一篇X-Spider专业级推特媒体批量下载解决方案下一篇ArduPilot自动驾驶系统核心技术架构深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

江苏安航船舶设备有限公司的企业合作伙伴多吗
江苏安航船舶设备有限公司的企业合作伙伴多吗

锚定赛道,践行船舶安全与环保装备产业的时代使命 顺应行业发展趋势,锚定产业升级方向当前全球航运产业正向着绿色化、安全化、国产化方向深度转型,国际海事组织对船舶安全防护、污染排放的监管标准持续升级,国内航运市场也在推进国… · 2026/9/26 2:53:02

辽阳塑料内衬袋定制生产企业选择哪家好,大连大九塑料厂实力与用户口碑深度解析
辽阳塑料内衬袋定制生产企业选择哪家好,大连大九塑料厂实力与用户口碑深度解析

在辽阳区域的化肥生产、粮食收储、建材加工、水产品冷链等领域,不少采购负责人都在寻找靠谱的塑料内衬袋定制批发供应商,会搜索塑料内衬袋批发加工厂哪家专业、塑料内衬袋定制兼批发生产厂哪家专业、塑料内衬袋定制批发优质制造厂哪个值得选这类问题&… · 2026/9/26 2:53:02

isomorphic-git 错误码体系全解析:基于 0.75.0 错误码索引的源码级错误处理实战
isomorphic-git 错误码体系全解析:基于 0.75.0 错误码索引的源码级错误处理实战

开发工具 【免费下载链接】isomorphic-git A pure JavaScript implementation of git for node and browsers! 项目地址: https://gitcode.com/gh_mirrors/is/isomorphic-git 点击查看 免费下载 导读 isomorphic-git 是一套纯 JavaScript 实现的 Git 工具库&#… · 2026/9/26 2:52:55

LabVIEW数据采集与趋势分析VI设计实战与避坑指南
LabVIEW数据采集与趋势分析VI设计实战与避坑指南

做LabVIEW这几年,我见过太多人把“数据采集与变化趋势分析VI”想得太简单:以为拖一个波形图表控件、接上驱动跑起来,能看到曲线就算完事。结果一到现场就现原形——界面卡死、数据丢帧、曲线毛刺多得像心电图、程序打包到别的电脑直接打不开。… · 2026/9/26 3:25:12

NodeWarden 附件与 Send 文件分享指南:R2 与 KV 双模式、大小上限与一次性令牌安全
NodeWarden 附件与 Send 文件分享指南:R2 与 KV 双模式、大小上限与一次性令牌安全

NodeWarden 附件与 Send 文件分享指南:R2 与 KV 双模式、大小上限与一次性令牌安全 【免费下载链接】nodewarden Bitwarden-compatible server running on Cloudflare Workers 项目地址: https://gitcode.com/gh_mirrors/no/nodewarden NodeWarden 是一个运行… · 2026/9/26 3:25:12

AI Agent Harness故障演练方案:用TaoToken统一Key跑通混沌工程容错验证
AI Agent Harness故障演练方案:用TaoToken统一Key跑通混沌工程容错验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:25:12

2025亲测10款免费AI写小说工具:TaoToken统一Key接入DeepSeek/Kimi/豆包配置指南
2025亲测10款免费AI写小说工具:TaoToken统一Key接入DeepSeek/Kimi/豆包配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:25:12

大模型之Linux服务器部署大模型扒:TaoToken统一Key接入Cline的config.json骨架
大模型之Linux服务器部署大模型扒:TaoToken统一Key接入Cline的config.json骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:25:12

零碳工厂建设指南:从碳盘查到认证的全流程实操
零碳工厂建设指南:从碳盘查到认证的全流程实操

最近有几个做制造业的朋友陆续来问我同一个问题:“零碳工厂要怎么建,指导意见里到底说了什么?”问的人多了,我发现大家其实卡在同一个地方——概念太多、文件太散、落地路径不清晰,很多人看完还是一头雾水。这篇我就用… · 2026/9/26 3:25:05

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码