认识 ts-grm
这一页先回答两个问题:ts-grm 是什么,以及这本教程怎么读。
ts-grm 是什么
ts-grm 是面向 TypeScript 7 的 GRM(ORM+)——数据访问框架,Jimmer 的 TypeScript 移植。GRM 是对 ORM 的扩展:不满足于「把表映射成对象」,还覆盖读写、取形、关联、多态、复合值与公式等完整的数据访问需求。
和常见 ORM(Prisma、TypeORM、Sequelize…)相比,ts-grm 的根本差异在三个设计支点:
- 零代码生成——
model(...)的 class 就是全部元数据,字段类型与可空性从声明直接推断;没有预处理器、没有生成文件、没有运行时反射; - 没有实体对象——查询不返回「实体」,返回视图声明的精确 DTO:列表只要两列就只物化两列;没有懒加载魔法与隐藏状态,序列化即所得;
- 查询即取形,类型即形状——
dto.view像 GraphQL 一样声明要哪些列与关联,返回类型由类型系统推导并在编译期锁定:取错字段当场编译失败,而不是运行期才暴露。
一句话总结:模型描述「表有什么」,视图 / Input 描述「这次要什么」——框架在两者之间生成最直接的 SQL 与最小可用的 DTO。读侧用 View 取形,写侧用 Input DTO 取形(后者随上游发布中),是「双向的 GraphQL」。
想深入这套理念,核心概念章有一整页「DTO 哲学」讲为什么可以没有实体对象——那是 ts-grm 与常见 ORM 最大的理念差异。
本站:可运行的交互式教程
本站是 ts-grm 的交互式中文教程,与框架文档互补:
- 每个概念对应一篇小页,每页都有一段可以在线运行的示例代码;
- 示例用「+ 添加到工作区」放进右侧沙盒,点「运行」即可查看真实结果;
- 右侧「数据库」抽屉随时看数据变化,每次运行都能看到 ts-grm 生成的 SQL 追踪;
- 无需注册登录——数据库跑在你自己的浏览器里(PGlite,WASM 版 PostgreSQL),数据不离开本机。
你会学到什么
教程分三块递进:
- 概念:模型、视图(View)、查询 DSL、类型系统——ts-grm 怎么想问题(它没有实体对象,查询直接得到 DTO);
- 查询:条件、排序、取形、分页、聚合、子查询——功能大头;
- 后端:驱动、事务、方言、命名策略——部署与深度使用。
「变更 API(保存 / Input DTO)」正在按上游实现进度跟进:上游运行时尚未发布的部分,教程以设计预览呈现并标注适配版本,不会写成已可用的假象。
章节地图
| 章节 | 内容 |
|---|---|
| 快速上手 | 安装、模型、视图、查询 |
| 核心概念 | 模型、属性、关联、继承多态、DTO 哲学 |
| 查询 API | 条件、排序、取形、分页、聚合、子查询、CTE |
Input DTO 保存、根模式、解绑 —— 尚未发布,随上游 @ts-grm/core 实现后开放 | |
| SQL 后端 | 驱动、事务、方言、命名策略、日志 |
| API 参考 | core / sql 快速参考 |
正式阅读前,请先看本组第二页「沙盒环境」——了解每页示例在哪里运行、数据库抽屉与数据重置是怎么回事。
三条阅读路径
新用户(对 ts-grm / 类型级 ORM 都陌生)
按顺序读:快速上手四步 → 核心概念(重点是「DTO 哲学」——与常见 ORM 最大的理念差异)→ 查询前五节,之后按需补。
ORM 老手(用过 Prisma / Sequelize / Jimmer)
快速上手快速过 API 手感 → 「DTO 哲学」与「取形进阶」——理念摩擦最大的两处 → 其余按工作场景查。
深入研究者(性能、类型系统、方言)
先读 SQL 后端与 API 参考;每个查询页的 SQL 追踪片段直接到沙盒复核。
术语速记
| 术语 | 含义 |
|---|---|
| GRM(ORM+) | 对 ORM 的扩展:读写、取形、关联、多态、复合值、公式等完整数据访问能力 |
| 模型(Model) | model(...) 声明的实体形状,仅元数据 |
| 视图(View) | dto.view 声明的查询结果形状 |
| 取形 | 按视图选择要返回的字段与关联 |
| 列表达式 | 表对象上某列的类型级对象(book.price),比较方法在它上面 |
| DTO | 查询 / 保存的载荷形状,没有实体对象 |
| 沙盒 | 本教程在线可运行环境:浏览器本地数据库 + 代码工作区(无需登录) |
与上游版本的关系
本教程按 @ts-grm/core / @ts-grm/sql 的 0.0.x 版本适配,每页 frontmatter 标注 verified 已校验版本。上游发版活跃,教程会持续跟进。