最近在开发 TsFullStack ,其中的后端 api 深度集成了 Effect。
为什么是 effect-ts
例如下面这个上传接口,他内部是依赖了 authService(用户信息),如果我们通过参数来传递 auth 的话,在嵌套调用的情况下会非常繁琐,尤其是后期新增一个依赖,那么就要全链路改动。
为了避免上面这个问题一般采用线程变量(在 node 中可以使用 CLS)或者 InversifyJS 这样的方案,又或者在 vue 中也有 provied inject 这样的方案。
但他们有一个最大的缺点就是在实际运行程序(或者通读代码)之前没法知道一段程序究竟依赖了什么,而 Effect 通过巧妙的 ts type 解决了这个问题,例如下面是 TsFullStack 中运行包含上面 upload 相关接口的程序,我手动注释掉了 provide authService 的代码,可以看到 ts 就会提示缺少了 AuthService。
这就实现了在实际运行程序之前知道一段程序究竟依赖了什么
那么什么场景非常需要这个特性呢?
- 编写严谨不易出错的程序
- 编写单元测试,没有这个特性的话编写单元测试就需要开发者反复阅读代码确定一个片段依赖了什么。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于