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

时间:2016-03-04 12:53:22

标签: node.js typescript amd commonjs

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

问题是我需要在类声明之前添加“export”以便在服务器中访问它们,但是在浏览器中我得到了这个错误:

  

未捕获的ReferenceError:未定义导出

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

  

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

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

有关如何在浏览器和服务器中访问TypeScript类的任何建议吗?

任何帮助都将深表感谢!

1 个答案:

答案 0 :(得分:5)

这绝对是可能的。

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

以下是我的设置部分:

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

它就像一个魅力。