Skip to content

[RFC] TypeScript tool support #2272

@atian25

Description

@atian25

背景

当前使用 TypeScript 开发 Egg ,会面临的影响开发者体验问题:

  • Egg 最精髓的 Loader 自动加载机制,导致 TS 无法静态分析出部分依赖,譬如 app/service/news.ts 会自动挂载为 ctx.service.news
  • Egg 的 Config 自动合并机制下,如何在 config.{env}.js 里面修改插件提供的配置时,能校验并智能提示?
  • 开发期需要独立开一个 tsc -w 独立进程来构建代码,带来临时文件位置纠结以及 npm scripts 复杂化。
  • 单元测试,覆盖率测试,线上错误堆栈如何指向 TS 源文件,而不是编译后的 js 文件。

思路

  • 约束
    • Egg 目前没有计划使用 TS 重写。
    • Egg 以及它对应的插件,提供对应的 index.d.ts 文件方便开发者使用。
  • 通过 TS 的 Declaration Merging 编写 d.ts 来辅助定位。
  • 使用 TS 2.8 提供的 Conditional Types 黑魔法。
  • 通过工具链方面的支持,在开发期无需编译 TS
    • egg loader 支持开发期加载 ts 文件
    • egg-bin 等工具支持 sourcemap 和 ts-node
  • 同样需引入工具链映射 sourcemap

事项

后续

以下内容不属于本期内容,仅做备忘,后续跟进

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions