关于TS下Egg plugin/framework开发的两个问题
发布于 5 年前 作者 paoloo1995 4019 次浏览 来自 问答

问题背景:用TS开发Egg Plugin/Framework,开发过程中,使用yarn link调试该Plugin/Framework。

问题1:Symbol.for('egg#eggPath') is required on Application这个问题,相关issue( https://github.com/eggjs/egg/issues/3591 )里已经有人找到了原因,我现在的做法是开发时手动把my-framework/node_modules/egg-core软链到应用的egg-core,可以临时的解决问题。请问当前有什么更好的解决方案吗?

问题2: extend目录下的context.ts / application.ts等mixin内容,在业务应用里没有对应的类型提示。Egg官方文档中有对这个问题的回答( https://eggjs.org/zh-cn/tutorials/typescript.html#使用了-egg-插件后发现没有对应插件挂载的对象 )。 文档中提出的解决方案是:即使Plugin/Framework是用ts写的,extends中的类型也还需要手动补充到my-framework/typings/index.d.ts中。这里想咨询的是,对于这种常见的ts开发Plugin/Framework的场景,Egg现在有(或者未来会提供)官方的生成index.d.ts的方案吗?

7 回复

手动艾特天猪大佬:@atian25

为啥不直接使用midway

@paoloo1995 midway是完全兼容egg体系的。简单理解就是egg+ts+ioc增强版本

@paoloo1995 目前 egg 有个自动生成 d.ts 从而实现声明注入的方案,在应用中可以自动生成,插件框架跟应用结构是一致的,所以一样可以生成

@whxaxes egg-ts-helper?直接egg-bin dev调用ets生成框架的.d.ts貌似有些问题。比如Application的mixin,ets生成出来的类型代码是interface Application extends ExtendApplication {},在应用里这么用没问题,框架里也这样,没法declaration merging的吧。 大佬可以试一下框架里用ets生成的typing能不能正常使用…反正我这边是不行的,也许我哪里姿势不对?

@paoloo1995 那这个就是 bug ,我看一下,弄好后我整个插件 demo 给你看

@paoloo1995 确实是有 bug,egg-ts-helper 生成的声明放到了 egg 里,会出现声明重复的问题,已经修复了,同时我写了个用 ts 来写插件的 demo :https://github.com/whxaxes/egg-plugin-ts-demo ,你可以参考一二

回到顶部