Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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
Interface 在两个应用程序之间共享接口?_Interface_Typescript - Fatal编程技术网

Interface 在两个应用程序之间共享接口?

Interface 在两个应用程序之间共享接口?,interface,typescript,Interface,Typescript,我可以设置什么共享机制来允许两个单独的typescript项目沿着公共接口进行通信 基本的想法是,我有一个主要的项目来实现接口,还有一个项目使用它们。然而,我不希望任何一个项目依赖于另一个 具体来说:我如何创建和分发一个合同库(如果适用,可能还有任何补充合同库的功能)。 TypeScript生态系统中是否存在通过NPM分发接口库的既定或新兴约定?只需在单独的文件中定义接口,或在文件interfaces.ts中收集所有共享接口(或interfaces.d.ts)。两个项目都可以引用此文件,您可以在

我可以设置什么共享机制来允许两个单独的typescript项目沿着公共接口进行通信

基本的想法是,我有一个主要的项目来实现接口,还有一个项目使用它们。然而,我不希望任何一个项目依赖于另一个

具体来说:我如何创建和分发一个合同库(如果适用,可能还有任何补充合同库的功能)。
TypeScript生态系统中是否存在通过NPM分发接口库的既定或新兴约定?

只需在单独的文件中定义接口,或在文件
interfaces.ts
中收集所有共享接口(或
interfaces.d.ts
)。两个项目都可以引用此文件,您可以在两个项目中都有该文件的副本

TypeScript不像C#那样必须引用底层程序集(尽管这将在C#with中修复)

但要注意:TypeScript并没有专门的运行时来确保接口匹配。由于一切仍然是JavaScript,所以在运行时必须确保接口匹配。如果一个项目使用另一个版本的接口,其属性在以前的版本中不存在,那么您仍然会遇到麻烦

TypeScript生态系统中是否存在通过NPM分发接口库的既定或新兴约定

使用package.json中的
typescript
键指向定义文件:


几年后,许多项目之后,今天这个问题最简单的答案就是将
.d.ts
发布到npm包并使用它!这个项目可以从typescript源代码构建,甚至包括构建代码


当然,在TypeScript和JS社区成熟并共同建立这些约定很久之后,现在这个答案中有很多已经出现。

有没有通过NPM分发接口的实践?是的,但不是通过NPM,而是通过使用repo的tsd工具。但是,只有当实现接口的库可供其他人使用,而不是供您内部使用时,才应该添加接口。对于内部使用,您可以设置自定义repo,并且如果将tsd工具指向该repo,则仍然可以使用该工具。还请注意,tsc编译器可以为您创建库的.d.ts文件(其中还将包含导出类的类型注释)。即使使用此解决方案,您似乎仍将维护两个单独的文件。理想的解决方案是只管理位于中心位置的一个,并让您的项目导入它。到目前为止,我找到的唯一合理的解决方案是在自己的项目中构建接口,并将它们保存在NPM或其他repo中,您可以通过NPM安装引用接口项目/模块。这样一来,唯一的缺点就是必须随时更新所有项目。