
告别编译步骤用 skills 在 Node.js 22 上实现零构建的原生 TypeScript 类型剥离【免费下载链接】skillsMy own collection of skills for modern Node.js development项目地址: https://gitcode.com/gh_mirrors/skills15/skills还在为 TypeScript 项目配置繁琐的构建流程而头疼吗开源项目skills面向 AI 辅助开发的 Node.js 最佳实践技能库中的 node 技能 给出了简洁答案借助 Node.js 22 的TypeScript 类型剥离Type Stripping你可以让.ts文件像 JavaScript 一样直接被node命令运行实现零构建的 TypeScript 开发体验。什么是 TypeScript 类型剥离为什么它能告别编译传统工作流里TypeScript 必须先经过tsc编译成 JavaScript 才能运行还要额外搭配 ts-node、tsx 等工具。而Node.js 22 原生 TypeScript 支持走的是另一条路类型剥离 运行时剥掉类型注解而非转译代码。它的本质差异是传统编译方案Node.js 22 类型剥离先编译再运行直接运行.ts文件依赖 ts-node / tsx 等工具零额外依赖开箱即用编译可能改变运行时行为只做删除不转译行为可预期版本支持上Node.js 22.6加启动参数node --experimental-strip-types app.ts即可体验Node.js 22.19 / 23.6 / 24默认开启直接node app.ts运行无需任何标志。这一能力在 skills 项目中被明确列为 Node.js 首选实践——详见 skills/node/SKILL.md 中 TypeScript with Type Stripping 一节的推荐策略。快速上手3 步配置零构建 TypeScript 项目第 1 步确认 Node 版本node -v # 需要 22.622.19 体验最佳免标志位第 2 步按类型剥离要求编写代码类型剥离只删除类型不改写代码因此有几条硬性规则完整清单见 skills/node/rules/typescript.md✅ 类型导入必须用import type或内联type关键字❌ 不用enum改用as const的常量对象❌ 不用namespace改用标准模块导出❌ 构造函数中不写参数属性constructor(public name: string)改为显式声明成员✅ 导入路径保留.ts扩展名例如import { helper } from ./helper.ts。一个最小可运行示例摘自 node 技能文档// greet.ts import type { IncomingMessage } from node:http; const greet (name: string): string Hello, ${name}!; console.log(greet(world));运行它node greet.ts # 无编译、无 ts-node、无 tsx第 3 步配置 tsconfig.json 做只检查、不产出skills 仓库本身就是零构建的活例子tsconfig.json 中关键选项是noEmit: true——TypeScript 只负责类型检查Node.js 负责执行两者各司其职。建议配合这几个选项module: NodeNextmoduleResolution: NodeNext与原生 ESM 解析对齐allowImportingTsExtensions: true允许导入时写.ts扩展名isolatedModules: true/verbatimModuleSyntax: true从编译器层面守住类型剥离的兼容边界。项目里的 src/index.ts 就是一个纯粹用 TS 直接维护的入口配合 package.json 中的typecheck脚本tsc --noEmit完成检查整个仓库没有任何编译产物目录。常见踩坑清单这些语法无法被剥离新手最常遇到的问题几乎都是写了需要转译的语法。下面对照表帮你自查❌ 不兼容写法✅ 类型剥离友好替代enum Status { ... }const Status { Active: active } as constnamespace Utils { ... }标准export模块constructor(public name: string)类内显式声明属性再赋值import { User } from ...仅当类型用import type { User } from ...旧版实验性装饰器TC39 Stage 3 标准装饰器 小贴士开启verbatimModuleSyntax后混用值导入和类型导入会直接报错等于让编译器帮你提前排雷。测试与发布零构建不打断测试和发包流程测试零改造。Node.js 内置测试运行器可以直接执行 TS 测试文件skills 项目的 package.json 中test脚本就是最简的node --test。仓库中的示例服务 graceful-server.ts 及其配套测试即为真实参考。发布时才编译。开发阶段零构建不代表发布放弃编译。skills/node/rules/typescript.md 建议为发布单独维护一份构建配置tsconfig.build.json开启declaration、outDir等选项生成.d.ts与 JS 产物用rewriteRelativeImportExtensions把.ts导入改写为.js——开发和发布两条轨道互不干扰。总结把构建复杂度交给类型系统而不是构建管线通过 skills 项目沉淀的最佳实践Node.js 22 上的 TypeScript 开发可以概括为一句话运行时交给 Node类型检查交给 tsc --noEmit构建只在发布时发生。想深入更多 Node.js 最佳实践可继续浏览技能索引skills/node/SKILL.md —— 异步模式、错误处理、流、性能调优等完整规则入口skills/node/rules/modules.md —— ESM 模块规范skills/nodejs-core/SKILL.md —— 深入 V8、libuv 与 Node.js 内核机制AGENTS.md —— 本仓库的架构说明与常用命令速查【免费下载链接】skillsMy own collection of skills for modern Node.js development项目地址: https://gitcode.com/gh_mirrors/skills15/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考