Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular TypeScript:重用前端(角度)和后端的接口和类_Angular_Typescript - Fatal编程技术网

Angular TypeScript:重用前端(角度)和后端的接口和类

Angular TypeScript:重用前端(角度)和后端的接口和类,angular,typescript,Angular,Typescript,我有一个基于前端(Angular)和后端(用NestJS开发,所以是NodeJS)的monorepo用于当前项目。我想为前端和后端使用自定义接口和类。例如,创建DTO以便前端知道后端的参数 我考虑了一个公共文件夹,如下面的项目结构所示,但这不起作用,因为公共文件夹不在Angular(tsconfig)的范围内,因此自动完成不起作用 project ├── client (Angular) ├── server (NestJS) └── common (client and server shar

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

我考虑了一个公共文件夹,如下面的项目结构所示,但这不起作用,因为公共文件夹不在Angular(tsconfig)的范围内,因此自动完成不起作用

project
├── client (Angular)
├── server (NestJS)
└── common (client and server share specific interfaces and classes)
有人有这方面的经验吗?目前,我将我的界面添加到两个文件夹中,但这很糟糕,因为如果我更新一个界面,我也必须替换另一个。

类似的工具有助于这种设置,根据经验,这是在不创建任何私有npm repo(这是另一种选择)的情况下进行操作的最简单方法

基本上,您可以设置angular和服务器软件包来安装公共软件包,就像其他任何npm软件包一样,并运行lerna为每个软件包创建虚拟链接。
这样,当您需要intellisense时,编辑器将通过lerna在引导阶段创建的虚拟文件链接,从而允许您创建任意数量的通用软件包,而无需进行任何繁重的工作来连接所有消费者软件包。

在tsconfig.json中将通用添加到
路径
属性:

     "paths": {
       "@angular/*": ["node_modules/@angular/*"],
       "rxjs/*": ["node_modules/rxjs/*"],
       "common/*": ["../common/*"]
     }
然后:
从“公共文件夹中导出的接口”导入myInterface

最好是有一个index.ts,它导出所有服务、接口或其他: 在TypeScript 3.0“项目参考”中引入了“/myFile”中的导出*。这可以帮助你实现你想要的(我用它在角度函数和云函数之间共享模型)

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

{
  "compilerOptions": {
    // The usual config
  },
  "references": [
    { "path": "../my-other-project" }
  ]
}

尝试此资源:谢谢,但将其导出为tgz文件或上载到npm(公共或私有)以供外部使用并不好。可能还有另一个没有NPM的选项,引入了角度6 monorepo支持。您应该升级到ng6+并将接口移动到ng库。然后,您应该能够在这两个项目中使用它们。但是,不可能将它们放在文件夹结构的第一层,因为它必须位于angular范围内,才能使用angular cli。当然,你也可以把它们放在npm模块中。服务器不是角度项目,所以这不起作用。我几周前就试过了,但不起作用。我也没有找到任何显示工作示例的项目或Github存储库嗨,这个repo怎么样?似乎缺少一个有用的示例package.json,因此我无法验证它是否有效。在我的项目中,如果使用项目引用,则“自动完成”不起作用。这仅在本地起作用。如果您想在服务器上运行它,它将不起作用,因为别名没有解析(请参阅)Lerna是目前最简单的(对我来说是唯一的)工作解决方案