在客户端和服务器之间共享 TypeScript 类

Sharing TypeScript classes between client and server

我有一个用 TypeScript 编写的 Node.js 项目。在我的项目中,我有一个名为 "public" 的文件夹,其中包含客户端代码 & HTML 以及一个名为 classes.ts 的文件,该文件应该共享给服务器端。

问题是我需要在 classes 声明之前添加 "export" 以使它们在服务器中可访问,但随后在浏览器中出现此错误:

Uncaught ReferenceError: exports is not defined

我发现了这些问题: https://github.com/Microsoft/TypeScript/issues/5094, Setup a Typescript project with classes shared between client and server apps?, Share module between client and server with TypeScript, 这建议在服务器中使用 commonjs,但在客户端中使用 amd。这个解决方案的问题是他们有 3 个不同的项目(服务器、客户端和共享),而我只有一个使用 commonjs 的项目。 另一个建议是:

the other option, which is more convoluted and will require a post build step to massage the code; if you can not use module loaders in your client code, is to isolate all module dependencies in your server code, then in the shared, they are just classes. Build the shared files without --module, and no exports or imports, but all inside a single namespace, say namespace MyApp { ... }; in your client code, you include them directly, and emit using --out. in your server code, you first emit the shared code to a single file, shared.js, and a single .d.ts shared.d.ts, augment these with some code to export them as a module, e.g. append exports = MyApp at the end of your shared.js and shared.d.ts, then import them from your server code.

但我不想一直处理更新 .d.ts 文件,而且我也不确定它是否适用于一个项目。

关于如何使 TypeScript class 在浏览器和服务器中都可访问的任何建议?

任何帮助将不胜感激!

这是绝对有可能的。

我有一个项目包含在浏览器中运行的 SPA 客户端应用程序和在 node.js 中运行的服务器 运行,它们共享通用的打字稿 类。对于所有这些,我只有一个 tsconfig.json 文件(我仍然不确定这是最好的方法,但现在它工作得很好)

以下是我的部分设置:

  • 使用模块(以前称为外部模块)。您自己的模块不需要命名空间和 d.ts 文件。
  • module = "commonjs" 在 tsconfig.
  • 在客户端使用 System.js 作为模块加载器(这将解决您的 'Uncaught ReferenceError: exports is not defined')。您可以使用 angular2 5 min quickstart 作为参考如何设置 system.js.

它就像一个魅力。