在两个应用程序之间共享一个界面?

Share an interface between two apps?

我可以采用什么共享机制来允许两个独立的打字稿项目通过公共接口进行通信?

基本思路是,我有一个主要项目将实现这些接口,并且会有另一个项目使用它们。但是我不希望任何一个项目依赖于另一个项目。

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

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

TypeScript 不像 C#,在 C# 中您必须引用底层程序集(尽管这将在 C# 中通过 assembly neutral interfaces 修复)。

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

Are there any established or emerging conventions in the TypeScript ecosystem to distribute libraries of interfaces via NPM

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

https://github.com/DefinitelyTyped/tsd#link-to-bundled-definitions

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

当然,现在很多答案都是在 TypeScript 和 JS 社区成熟并共同建立这些约定之后很久的。