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

2024-03-13

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

问题是我需要在类声明之前添加“导出”,以便使它们可以在服务器中访问,但随后在浏览器中我收到此错误:

未捕获的引用错误:未定义导出

我发现了这些问题:https://github.com/Microsoft/TypeScript/issues/5094 https://github.com/Microsoft/TypeScript/issues/5094, 设置一个 Typescript 项目,其中包含客户端和服务器应用程序之间共享的类? https://stackoverflow.com/questions/25524206/setup-a-typescript-project-with-classes-shared-between-client-and-server-apps, 使用 TypeScript 在客户端和服务器之间共享模块 https://stackoverflow.com/questions/13113995/share-module-between-client-and-server-with-typescript, 这建议在服务器中使用 commonjs,而在客户端中使用 amd。这个解决方案的问题是他们有 3 个不同的项目(服务器、客户端和共享),而我只有一个使用 commonjs 的项目。 另一个建议是:

另一种选择更复杂,需要发帖 构建步骤来处理代码;如果你不能使用模块加载器 您的客户端代码,是隔离服务器中的所有模块依赖项 代码,那么在共享中,它们只是类。构建共享 没有 --module 的文件,并且没有导出或导入,但全部位于 单个命名空间,例如命名空间 MyApp { ... };在您的客户端代码中, 您可以直接包含它们,并使用 --out 发出。在您的服务器代码中, 您首先将共享代码发送到一个文件、shared.js 和一个 单个 .d.ts 共享 .d.ts,用一些代码来扩充它们以导出它们 作为一个模块,例如在shared.js 的末尾附加exports = MyApp 和shared.d.ts,然后从您的服务器代码导入它们。

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

有什么建议如何使 TypeScript 类在浏览器和服务器中均可访问吗?

任何帮助将不胜感激!


这是绝对有可能的。

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

以下是我的设置的一部分:

  • 使用模块(以前称为外部模块)。您自己的模块不需要命名空间和 d.ts 文件。
  • tsconfig.json 中的 module = "commonjs"
  • 在客户端使用 System.js 作为模块加载器(这将解决您的“未捕获的引用错误:导出未定义”)。您可以使用Angular2 5 分钟快速入门 https://angular.io/docs/ts/latest/quickstart.html作为如何设置 system.js 的参考。

它就像一个魅力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在客户端和服务器之间共享 TypeScript 类 的相关文章

随机推荐