用途
该技能适用于构建端到端 TypeScript 应用,典型场景包括:全新的 TypeScript Web 应用(React + Node);将分离的 JS 前端与 JS 后端统一到 TypeScript 之下;在保持前端运行的前提下,把 Express/JS 后端重构为带类型的 Fastify/TS 后端;以及搭建跨包共享类型的单体仓库(monorepo)。其核心目标是让同一套类型从数据库流向后端、前端和移动端,实现层与层之间零运行时类型漂移。
架构基线
资料给出的架构基线包含:apps/web(Next.js)、apps/mobile(Expo RN)、apps/api(Fastify)、packages/schemas(Zod)、packages/api-client(tRPC / fetch)、packages/db(Prisma client)、packages/ui(类 shadcn 组件)、packages/config(tsconfig、eslint、prettier)。其中 Zod schema 是类型的唯一事实来源,TypeScript 类型由推断得到。
主要方案
API 层:内部 API 使用 tRPC,类型直接流动,无需 OpenAPI;只有当外部客户端消费 API 时才使用 REST + OpenAPI,可选用 ts-rest 或 zod-to-openapi。资料给出的 tRPC 与 REST 选择规则为:所有客户端都是自有代码、无公开 API 时用 tRPC;有外部合作方、第三方集成或公开 SDK 时用 REST + OpenAPI;移动端使用旧 TS 版本或无 TS 时用 REST;组织内已有 GraphQL 生态时用 GraphQL。
数据层:SQL-first 数据层用 Prisma,若希望在代码中直接看到 SQL 并获得更细控制则用 Drizzle。资料给出的决策规则为:希望以 schema.prisma 为事实来源、迁移良好、团队 SQL 水平参差时用 Prisma;希望 SQL 在代码中可见、复杂查询、性能关键时用 Drizzle;仅用 Postgres 且需要高级特性(数组、范围、自定义类型)时用 Drizzle;以 MySQL 为主且迁移需与 PHP 应用一起管理时用 Prisma。
共享类型层:Zod schema 作为共享层,可被 API 校验、Prisma 自定义类型、React Hook Form、tRPC 输入和测试夹具消费。
认证:可使用 Lucia(基于会话、数据库支撑)、better-auth(含 MFA、OAuth、魔法链接)、Clerk(托管认证)或 NextAuth/Auth.js;资料明确不推荐自行实现密码哈希、会话存储或 OAuth 流程。
单体仓库:使用 turborepo,通过 pnpm init -w 与 pnpm add -D turbo 初始化,turbo.json 定义 build、test、lint、type-check 流水线并带缓存。每个包拥有自己的 tsconfig.json,继承 packages/config/tsconfig.base.json,通过项目引用(project references)实现增量类型检查。
测试:单元测试在各自包内使用 vitest;集成测试使用 vitest + 测试数据库(Testcontainers 或 pg-lite);E2E 使用 Playwright;契约测试在暴露 REST 时对 OpenAPI 规范做快照,破坏性变更会使 CI 失败;类型测试使用 expectTypeOf。
部署:针对 Node 使用多阶段 Dockerfile,基于 node-slim,使用非 root 用户,通过 pnpm deploy 仅安装生产依赖。
反模式
资料列出的反模式包括:在前端和后端重复定义类型;在客户端不经验证就信任 API 响应;在应用启动时运行数据库迁移(应在 CI 或单独迁移步骤中运行);在没有驱动适配器的情况下跨 edge 与 Node 运行时共享 Prisma client;将服务端代码导入客户端代码;CI 中没有远程构建缓存的单体仓库;以及在 API 边界使用 any。
依赖与限制
使用前需加载 typescript-effective 以获得生产惯用法、加载 typescript-mastery 以获得类型系统深度。参考文献目录包含 monorepo-turborepo、fastify-backend、trpc-end-to-end、rest-plus-openapi、prisma-vs-drizzle、zod-shared-schemas、auth-patterns、testing-full-stack、docker-node-production 以及 large-scale-react-ts。该技能要求读取和搜索权限,编辑、数据库变更、构建和测试需要授权。在无执行或服务的情况下处于降级模式,返回未验证的集成点和精确端到端检查,并需在每个网络边界运行时校验。其产出为端到端 TypeScript 实现或设计,包含共享契约、测试和部署说明。