TypeScript:为前端(Angular)和后端重用接口和类

Pau*_*aul 10 typescript angular

我有一个基于前端(角度)和后端(使用NestJS开发的-因此是NodeJS)的当前项目的monorepo。我想同时使用自定义接口和类-前端和后端。例如,创建DTO以便前端使我知道后端的参数。

我想到了一个通用文件夹,如以下项目结构所示,但这是行不通的,因为该通用文件夹不在Angular(tsconfig)的范围内,因此自动填充无法正常工作

project
??? client (Angular)
??? server (NestJS)
??? common (client and server share specific interfaces and classes)
Run Code Online (Sandbox Code Playgroud)

有人对此有经验吗?目前,我将接口添加到两个文件夹中,但这是邪恶的,因为如果更新一个接口,则也必须替换另一个接口。

Voj*_*ech 5

在TypeScript 3.0中,引入了“项目引用”。这可以帮助您实现所需的功能(我曾使用它在角度和云函数之间共享模型)

https://www.typescriptlang.org/docs/handbook/project-references.html

您需要做的是将外部项目引用添加到该项目的外部引用,该引用tsconfig.json应从其他位置重用文件

{
  "compilerOptions": {
    // The usual config
  },
  "references": [
    { "path": "../my-other-project" }
  ]
}
Run Code Online (Sandbox Code Playgroud)


小智 4

像Lerna这样的工具可以帮助完成这种设置,根据经验,这是最简单的方法,无需创建任何私有 npm 存储库(这是另一种选择)。

本质上,您设置 Angular 和服务器包来安装通用包,就像任何其他 npm 包一样,并运行 lerna 为每个包创建虚拟链接。这样,当您需要它们进行智能感知时,编辑器将遍历 lerna 在引导阶段创建的虚拟文件链接,从而允许您创建任意数量的通用包,而无需做任何繁重的工作来连接所有消费者包。