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

7
我正在编写一个应用程序,使用Angular2和TypeScript作为前端,NodeJS作为后端。我已经编写了一个JavaScript对象,希望在前端和后端之间共享。有什么更优雅的方法来实现这个目标?
我的最初想法是为前端编写一个.d.ts文件,并在JavaScript文件中添加module.exports,这样后端就可以调用require('myobject')。
虽然这个方法可以实现,但会导致浏览器抛出异常,在浏览器控制台中显示:“Uncaught ReferenceError: module is not defined”。
我不想让控制台被无用的错误信息淹没。那么还有没有其他更优雅的方法来解决这个问题呢?
1个回答

5
我知道的实现此目标最干净的方法是在两端编写模块化脚本并创建要共享的对象库(以使共享的对象定义在单个位置)。

设置

前端:使用Typescript,目标可以是ES6,并且模块为commonjs + Babel(需要Typescript 1.7),或者目标是ES5,模块为commonjs。使用webpack或browserify进行打包。

后端:ES6(在node上使用--harmony标志)或ES5。

对象库

创建一个名为shared的库,用TypeScript编写并创建导出的Object类。

export default class MyObject{ ... }

请确保库已使用declaration: true编译(例如在tsconfig中):tsc将生成js和类型声明文件(typings)。
在共享库的package.json中,请确保入口typings指向生成的MyObject.d.ts文件。如果有多个对象,请创建一个index.ts文件,重新导出所有对象,并将typings指向index.d.ts
用法:前端:由于您现在正在使用模块化JS/TS,请直接从Typescript导入您的对象。
import MyObject from 'shared'

Typescript转换器会自动从sharedpackage.jsontypings入口中找到.d.ts定义。

后端:只需使用require('shared')

注意:如果有多个共享对象,请不要在shared中使用默认导出:它们无法重新导出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接