如果你在TypeScript中构建了大规模应用,你是否有机会使用依赖注射(DI)容器.
作为InversifyJS的创造者,我花了多年时间深刻地思考了控制倒置,脱钩,以及如何让企业模式在TypeScript中感觉自然.
但是,这些年来,房间里出现了一头明目张胆的大象:我们非常依赖和依赖。
这些编译器的旗帜为我们提供了很好的服务,但它们正是这种经验。
它们将我们与遗留的装饰器执行联系起来,需要特定的编译器配置,并且经常感觉像一个魔法黑匣子,它并不完全与现代建筑管线相配合.
最近我花了很多时间思考 我们最终如何完全放下这些旗帜 同时保持开发者纯洁的经验 随着TypeScript 7的发布,我很高兴介绍这个解决方案:QQ RFLCT.
什么是RFLCT吗?
RFLCT是TypeScript 7的超时(AOT)反射元数据注射器.
它在建时直接注入.
零取装饰.
无.
它通过无插件与几乎所有的构建工具(Vite, Rollup,webpack,esbuilding)无缝地融合,也可以使用使用TypeScript 7 API的内置CLI进行独立项目.
让我们看看用RFLCT写代码的感受。
The Magic: Before and After With RFLCT, 您要使用特殊的包装类型来注释您想要曝光到运行时元数据的类型 。
您所写的: RFLCT 将其编译为: 注意到接口是如何安全地转换成全局符号的, 并且元数据被明确注册, 而看不到一个单独的装饰器 。
宽度大于正反JS 虽然我建立RFLCT的主要动机是为下一代的InversifyJS铺平道路,但这种基本的原始——可靠、无装饰者——释放出运行时类型的元数据的方法——更是松锁了。
因为RFLCT规范了类型在构建时如何被映射到内存,它在整个生态系统中具有巨大的潜力: Custom DI Engines:构建自己的轻量级反转控制容器而无需元数据锅炉板.
对象映射与水分:轻松映射数据库或API JSON结果直接回回即时分类.
RPC框架:通过验证对编译时间元数据的来历参数,保证类型安全网络边界.
运行时间验证:通过精确地读取构造器或方法所期望的类型来进行深运行时间验证.
How It Works: The Three Transforms under the high, RFLCT 在您构建步骤中执行三个核心转换:
- – 一个文件中的"全球类型注册"每类,接口,和类型别名都是在全球对象上全过程注册的.
界面和类型成为普遍独特的符号(例如.).
类映射直接到他们的构造者。
2.
参数类型元数据 任何带有(或)注释的参数都告诉编译器生成一个调用: 构造器: , 方法: - —— 编译-时间类型分辨率 写作起到宏观的作用。
它在编译时被替换为 : 编译到只编译到 Smart Symunications Qualification 的运行时间身份 . . . . .
生成的符号使用结构为 .
这可以防止相撞,允许小/patch版本共享符号,并确保共享库类型解决内存中完全相同的符号引用. * RFLCT目前处于早期阶段,npm模块尚未公布于公共登记处。
现在,为了尝试它,你需要直接从 GitHub 下载源并在当地建立.
1.
来源2.
项目设置 将本地软件包链接到您的工程 : 您需要从您的应用程序的切入点导入一次, 以多填充全球 API :
3.
配置你的构建工具,因为RFLCT是建在上方的,它直落到你现有的管道上。
维特: (用于滚滚、倒置和网络包装的插件是 als)