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:14 阅读更多 →
辽阳塑料内衬袋定制生产企业选择哪家好,大连大九塑料厂实力与用户口碑深度解析

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

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

2026/9/26 2:53:13 阅读更多 →
义诺企业管理咨询公司专业吗,服务流程是否规范

义诺企业管理咨询公司专业吗,服务流程是否规范

行业变迁中的本土深耕时间走到2024年,东北边境小城牡丹江的民营实体经济正在悄然焕发生机,本地制造业、商贸物流业持续扩容,中小微企业的用工结构也在发生深刻变化——越来越多企业开始尝试将非核心业务环节剥离,通过专业第三方服…

2026/9/26 2:53:13 阅读更多 →

最新新闻

基于卷积神经网络(CNN)的个性化定制表情系统的设计与实现机器学习实战项目python数据分析与可视化

基于卷积神经网络(CNN)的个性化定制表情系统的设计与实现机器学习实战项目python数据分析与可视化

✅源码获取: 🍅--------------------【点击左上方头像,在置顶文章上方的wx】联系我们-------------🍅✌网站介绍:✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。✌服务范围:大数据、机器学习…

2026/9/26 4:14:00 阅读更多 →
AI检测在线免费接口批量调用踩坑,我把流水线返工了3次

AI检测在线免费接口批量调用踩坑,我把流水线返工了3次

上周三凌晨两点我对着流水线的红色报错页面,差点把机械键盘敲出键程异响。当时为了赶内容合规的自动化流程,图省事接入了AI检测在线免费的能力,结果没捋清楚细节直接上线,连着踩了三波坑,返工三次才跑通。我们组Q3接了…

2026/9/26 4:14:00 阅读更多 →
2026查重工具排行实测踩坑:千万级文本库校验的性能坑点梳理

2026查重工具排行实测踩坑:千万级文本库校验的性能坑点梳理

上周运营妹子甩给我一张Excel表,说要做公司内容合规系统的底层校验模块,让我别光信网上传的2026查重工具排行,自己测了再上线。本来一开始我以为照着公开的参数拼几个主流接口,一周就能交付,结果头天测就给我整出个生产…

2026/9/26 4:14:00 阅读更多 →
.NET桌面程序部署:Windows Desktop Runtime版本匹配与离线安装实战

.NET桌面程序部署:Windows Desktop Runtime版本匹配与离线安装实战

/* 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 4:14:00 阅读更多 →
S5 传感器+视觉系统集成实战:触发链路、时序预算与联合调试

S5 传感器+视觉系统集成实战:触发链路、时序预算与联合调试

S5 传感器视觉系统集成实战:触发链路、时序预算与联合调试 一、为什么零件都选对了,系统还是不稳 先看三个我真实遇到的现场:传感器型号、相机、光源全都按选型手册挑的,参数表一对全在规格内,但产线就是跑不顺。 现…

2026/9/26 4:14:00 阅读更多 →
团队会议录音工具盘点:文件共享与协同功能有哪些

团队会议录音工具盘点:文件共享与协同功能有哪些

不少团队在多人会议后,经常遇到音频分散在不同设备、转写文稿各自保存、后续多人整理时版本混乱的情况。不同场景下的录音工具,在文件共享与协同能力上存在明显差异。核心协同相关能力梳理不同工具在团队协作环节的能力边界各有不同,可通过基…

2026/9/26 4:12:59 阅读更多 →

日新闻

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

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

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

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →