我正在编写一个使用Angular2和TypeScript作为前端,使用NodeJS作为后端的应用程序.我已经编写了一个JavaScript对象,希望在前端和后端之间共享.最优雅的方法是什么?
我最初的想法是为前端编写一个.d.ts,并在javascript文件中添加一个module.exports,因此后端可能需要(‘myobject’).
在此过程中,这将导致浏览器抛出异常,并在浏览器控制台中显示异常:“未捕获的ReferenceError:模块未定义”.
而且我不想用不必要的错误消息来污染控制台.那么还有另一种更优雅的方法吗?
解决方法:
我知道的“最干净”的方法是在两端编写模块化脚本,并创建要共享的对象库(以便在单个位置定义共享的对象)
设定
前端:打字稿与
>目标ES6,模块:commonjs Babel(需要Typescript 1.7)
>或目标ES5,模块:commonjs
使用webpack或browserify捆绑
后端:ES6(节点上带有–harmony标志)或ES5
图书馆
创建一个用Typescript编写的共享库,并创建导出的Object类
export default class MyObject{ ... }
确保使用以下声明编译该库:true(例如,在tsconfig中):tsc将生成js的类型(声明).
在共享库的package.json中,确保条目类型设置为指向生成的MyObject.d.ts文件.如果有多个对象;创建一个index.ts文件,该文件重新导出所有对象,并将键入的内容指向index.d.ts
用法
前端:由于您现在正在使用模块化JS / TS,因此直接从Typescript导入对象
import MyObject from 'shared'
打字稿翻译器将从共享的package.json的键入项中自动找到.d.ts定义.
后端:只需require(‘shared’)
注意:如果有多个共享库,请不要在共享库中使用默认导出:无法重新导出它们.
原文地址:https://codeday.me/bug/20191027/1945659.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。