TypeScript Nodejs 项目结构

bigdata 2018-10-26 17:44:24 ⋅ 942 阅读
目录

1. 新旧交替

新事物代替旧事物无外乎旧事物太陈旧。

JS动态软类型语言,便利的同时也带来了很多弊端,随着项目的增大,加上没有注释,你完全会懵逼。

可以看下网上汇总的错误信息,有多少个是类型错误引起的

15371487615795.jpg

图为rollbar统计的数千个项目中数量最多的前十个异常
而TS在你编写代码的时候,你就可以很直观的看到哪个变量有效、哪个变量重名、哪个变量不可以更改等等
并且提供了多种数据类型,更加面向对象

掘金上有一篇对比JS 与 TS的文章,我摘录一段

1. TypeScript 从核心语言方面和类概念的模塑方面对 JavaScript 对象模型进行扩展。
2. JavaScript 代码可以在无需任何修改的情况下与 TypeScript 一同工作,同时可以使用编译器将 TypeScript 代码转换为 JavaScript。
3. TypeScript 通过类型注解提供编译时的静态类型检查。
4. TypeScript 中的数据要求带有明确的类型,JavaScript不要求。
5. TypeScript 为函数提供了缺省参数值。
6. TypeScript 引入了 JavaScript 中没有的“类”概念。
7. TypeScript 中引入了模块的概念,可以把声明、数据、函数和类封装在模块中。

作为后端开发,也许会被传统的C、C++、Java、C#误以为是前端或小儿科,能干啥大事,

编程语言的鄙视链

asm → C ↔ C++ ↔ Java ↔ C# → JavaScript → VB → VBScript
Common Lisp ↔ Scheme → Emacs Lisp →→ Python
Python ↔ Perl → shell → PHP → all

15371497139971.jpg

除了PHP,我谁都不服

没有调研的鄙视就是耍流氓

金无足赤、人无完人,更何况语言,所以各自发挥自己的优势就好,为啥要鄙视!!!真是的
记得 改天,咱一块diss PHP兄弟 ^_^

当你们都做老板的时候,我一开始身体力行,钱不好赚啊!Node.js : 我只需要一个店小二

2. TypeScript在node中的应用

在TS的官网中,有着大量的示例,其中就找到了Express版本的例子.有兴趣的可以参考一下,我自行更改了一些,目录结构如下

javascript . ├── build // 编译文件 ├── node_modules // 模块文件 ├── src // 资源文件 │ ├── app.ts // 程序入口 │ ├── config // 配置文件 │ │ ├── config-local.ts │ │ ├── config-production.ts │ │ ├── index.ts // index 文件 │ ├── controllers // 负责具体的业务模块流程的控制 │ │ ├── index.ts │ │ └── user.ts │ ├── daos // 负责与数据库进行联络 │ │ ├── index.ts │ │ └── user │ ├── doc // 可以存放一些文件 │ ├── models // 表映射 │ │ ├── entity │ │ ├── enum.ts │ │ └── index.ts │ ├── router // 处理接口请求 │ │ ├── index.ts │ │ └── user.ts │ ├── routerToken // 处理接口请求 │ │ ├── basic.ts │ │ └── index.ts │ └── utils // 常用模块封装 │ ├── index.ts │ └── log.ts ├── test // 测试文件 │ └── test.ts ├── views // 视图 ├── package.json ├── tsconfig.json // TS 配置文件 └── tslint.json // 代码规范 ¨G1G { "rules": { // TS特性 "member-access": true, // 设置成员对象的访问权限(public,private,protect) "member-ordering": [// 设置修饰符顺序 true, { "order": [ "public-static-field", "public-static-method", "protected-static-field", "protected-static-method", "private-static-field", "private-static-method", "public-instance-field", "protected-instance-field", "private-instance-field", "public-constructor", "protected-constructor", "private-constructor", "public-instance-method", "protected-instance-method", "private-instance-method" ] } ], "no-empty-interface":true,// 不允许空接口 "no-parameter-reassignment":true,// 不允许修改方法输入参数 "prefer-for-of":true,// 如果for循环中没有使用索引,建议是使用for-of ¨K16K } ¨G2G <ol> <li>指定待编译的文件</li> <li>定义编译选项</li> </ol> ¨G3G { // 配置编译选项 "compilerOptions": { "module": "commonjs", "noImplicitAny": true, "removeComments": true, "preserveConstEnums": true, "sourceMap": true }, // 指定待编译文件 "include": [ "src/**/*" ], // 排除待编译文件 "exclude": [ "node_modules", "**/*.spec.ts" ] } ¨G4G <ul> <li>:匹配 0 或多个字符(注意:不含路径分隔符)<br />? :匹配任意单个字符(注意:不含路径分隔符)<br />**/ :递归匹配任何子路径</li> </ul> ¨G5G .ts、.tsx 或 .d.ts 的文件。

如果开启了 allowJs 选项,那 .js 和 .jsx 文件也属于 TS 文件。

2. 编译选项

常用选项

选项字段 类型 默认值 说明
allowJs boolean false 允许编译 JS 文件
declaration boolean false 生成对应的 .d.ts 文件
checkJs boolean false 报告 JS 文件中存在的类型错误需要配合 allowJs 使用
declarationDir string - 生成的 .d.ts 文件存放路径默认与 .ts 文件相同
experimentalDecorators boolean false 启用实验功能-ES 装饰器
lib string[] - 编译时引入的 ES 功能库,包括:es5 、es6、es7、dom 等。如果未设置,则默认为: target 为 es5 时: ["dom", "es5", "scripthost"] target 为 es6 时: ["dom", "es6", "dom.iterable", "scripthost"]
module string target === "es3" or "es5" ?"commonjs" : "es6" 生成的模块形式:none、commonjs、amd、system、umd、es6、es2015 或 esnext 只有 amd 和 system 能和 outFile 一起使用 target 为 es5 或更低时可用 es6 和 es2015
noImplicitAny boolean false 存在隐式 any 时抛错
noImplicitReturns boolean false 不存在 return 时抛错
noImplicitThis boolean false this 可能为 any 时抛错
outDir string - 编译生成的文件存放路径默认与 .ts 文件相同
sourceMap boolean false 生成 .map 文件
target string es2017 生成 .js 文件版本

更加完整的请参考: TypeScript中文网-编译选项

关注我们



全部评论: 0

    我有话说:

    TypeScript Nodejs 项目结构

    1. 新旧交替 新事物代替旧事物无外乎旧事物太陈旧。 JS动态软类型语言,便利的同时也带来了很多弊端,随着项目的增大,加上没有注释,你完全会懵逼。 可以看下网上汇总的错误信息,有多少个是类型错误

    【开源资讯】TypeScript 4.0.5 发布

    TypeScript 4.0.5 发布了,本次更新主要解决了 4.0 版本以来出现的一些问题,提高了整体的稳定性。详细更新如下:BUG 修复1、解决了对于版本 4.0,创建可释放程序包删除

    数据结构

    结构,简单的理解就是关系。严格点说,结构是指各个组成部分相互搭配和排列的方式。在现实世界中,不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系成为结构。 数据结构:是相互之间存在一种

    Node实战篇:阶段项目(九)

    项目整体预览 项目的github地址 界面逼格还行-_- 主要功能: 登陆; 退出; 所用的主要模块: express, 路由.静态文件.模块分工等; express-session, 采用

    TypeScript教程

    VSCode+TypeScript 开发Nodejs只有更溜

    Nodejs视频服务器 切片ffmpeg

    Node 视频服务器 切片ffmpeg

    Node模块之Events模块(五)

    Node模块之Events模块(五)

    Node异步式I/O和异步式编程(三)

     Node.js 最大的特点就是异步式 I/O(或者非阻塞I/O)与事件紧密结合的编程模式。 第一部分: I/O 1.阻塞I/O与非阻塞I/O概念 1.1阻塞I/O(同步I/O) 线程在

    Node实战篇:Express--jade模板引擎(七)

    Jade(Pug) — Node Template Engine,一个高性能的模板引擎,专为 Node 而做......

    Node模块之fs模块(六)

    屏幕快照 2017-08-08 上午10.53.21.png 第一部分 概述 Node.js 提供一组类似UNIX(POSIX)标准的文件操作API,Node.js中操作文件的模块是fs(File

    Node实战篇:Express路由(三)

    Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。

    2018年8个技巧来构建更好的Node.js应用程序

    2018年8个技巧来构建更好的Node.js应用程序

    Nodejs 接入 公众号【逗比版】

    Nodejs 接入 公众号 需求:Boss: 我们要接入公众号,你看下文档对接下。Me: 🆗 然后,可能因为对腾讯的反感,加之网上对腾讯的吐槽,怀着愤世嫉俗的态度胡乱的找资源,看方案

    Node 模块之 util URL queryString path(八)

    第一部分 util util是一个Node.js核心模块,util模块设计的主要目的是为了满足Node内部API的需求。其中包括:格式化字符串、对象的序列化、实现对象继承等常用方法。要使用util

    NodeJS 10.5.0 中的线程:实用介绍

    几天前,Node.js版本10.5.0发布,其中包含的主要功能之一是添加了线程支持。

    TypeScript教程

    TypeScript--用的人都说好👌

    Node实战篇:Nodejs 链接 Mariadb 实例

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL

    Node模块(四)

    模块化分工、各司其职

    Node包管理NPM(二)

    NPM是什么? [NPM官网](https://docs.npmjs.com/)给出解释如下: ``` Use npm to install, share, and distribute code; manage dependencies i...