在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'
打字稿会自动从shared
的package.json
的.d.ts
条目中find.d.ts
定义。
后端:只require('shared')
注意:如果有多个共享对象,请不要在shared
使用缺省导出:它们不能被重新导出。