我编写的应用程序使用Angular2,其中Typescript作为前端,NodeJS作为后端。我已经写了一个我想在前端和后端之间共享的javascript对象。最优雅的方法是什么?
我最初的想法是为前端编写.d.ts,并在javascript文件中添加module.exports,因此后端可能需要(' myobject')。
虽然这有效,但这会导致浏览器抛出并显示在浏览器控制台中的异常:' Uncaught ReferenceError:模块未定义'。
我不想用不必要的错误消息来污染我的控制台。那么还有另一种更优雅的方法吗?
答案 0 :(得分:4)
"最干净"我知道这样做的方法是在两端编写模块化脚本并创建一个你想要共享的对象库(以便在一个位置定义共享对象)
前端:带有
的打字稿使用webpack或browserify捆绑
后端:ES6(节点上带有--harmony标志)或ES5
创建一个库,比如说shared
,用Typescript编写并创建导出的Object类
export default class MyObject{ ... }
确保使用declaration: true
编译库(例如在tsconfig中):tsc
将生成js + typings(声明)。
在package.json
库的shared
中,确保将条目typings
设置为指向生成的MyObject.d.ts
文件。如果有多个对象;创建一个index.ts
文件,重新导出所有对象,并将typings
指向index.d.ts
前端:由于您现在使用模块化JS / TS,直接从Typescript
导入您的对象import MyObject from 'shared'
typescript转换器会自动从.d.ts
typings
的{{1}}条目中找到shared
定义。
后端:只需package.json
注意:如果有多个共享对象,请不要在require('shared')
中使用默认导出:它们无法重新导出。