在Typescript前端和NodeJs后端之间共享js对象的最佳方法

我正在编写一个应用程序,使用TypeScript的Angular2作为前端,而NodeJS作为后端。 我写了一个javascript对象,我希望在前端和后端之间共享。 什么是最优雅的方式来做到这一点?

我最初的想法是为前端编写一个.d.ts,并在javascript文件中添加一个module.exports,所以后端可能需要('myobject')。

虽然这样做,这会导致浏览器抛出和浏览器控制台中显示的exception:“未捕获的ReferenceError:模块未定义”。

我想不污染我的控制台不必要的错误信息。 那么还有另外一个更优雅的方法吗?

我知道这样做的“最干净的”方式是在两端编写模块化脚本,并创build一个要共享的对象库(以便共享对象在一个位置定义)

build立

前端:打字稿

  • 目标ES6,模块:commonjs + Babel(需要Typescript 1.7)
  • 或目标ES5,模块:commonjs

捆绑使用webpack或browserify

后端:ES6(节点上带有–harmony标志)或ES5

图书馆

使用Typescript创build一个shared的库,并创build导出的Object类

 export default class MyObject{ ... } 

确保库是用declaration: true编译的declaration: true (例如在tsconfig中): tsc将生成js + typings(声明)。

shared库的package.json中,确保inputtypes设置为指向生成的MyObject.d.ts文件。 如果有多个对象; 创build一个index.ts文件,将所有对象和点types重新导出到index.d.ts

用法

前端:因为你现在正在使用模块化JS / TS,直接从Typescript导入你的对象

 import MyObject from 'shared' 

打字稿会自动从sharedpackage.json.d.ts条目中find.d.ts定义。

后端:只require('shared')

注意:如果有多个共享对象,请不要在shared使用缺省导出:它们不能被重新导出。