正版二手图书,可开发票,请放心购买。
¥ 18.59 2.1折 ¥ 89 八品
库存2件
作者【西班牙】Remo H·Jansen
出版社电子工业出版社
ISBN9787121300479
出版时间2016-11
装帧平装
开本16开
定价89元
货号1665260655819215872
上书时间2024-12-23
译者序
在 JavaScript社区的荒蛮时代里,构建大型 Web应用是一件吃力且烦琐的事情。但迫于业务发展的需要,业界一直在探索如何像成熟的工业化的语言那样开发和构建大型的应用。
微软在 2009 年发布了 TypeScript的第一个版本,它为 JavaScript 带来了类型系统与模块系统(现在已经废弃并鼓励使用 ES6模块)。而自从 TypeScript问世,JavaScript 社区就没有停止过对它的议论,有人认为类型系统给 JavaScript 带来的静态检查能力更有利于构建大型应用,而另一些人则认为类型系统会使 JavaScript 丧失其先天的灵活性和动态性,不利于提高开发效率。还有一些人担心 TypeScript为 JavaScript 带来了太多非标准的特性,很难保证 TypeScript在未来与 JavaScript在语言层面上保持高度统一。
译者在翻译本书前,刚刚经历了将一个 CoffeeScript应用全面使用 TypeScript重构。 CoffeeScript 从某种程度上来看完全是 TypeScript的对立面,它甚至比 JavaScript 更具动态性与灵活性。而在译者重构的这个项目中,代码量高达上万行,且包含数十个模块,之所以选择使用 TypeScript重构它,是因为日益增长的代码量与模块数使得团队协同开发的难度越来越大。
也正是因为这次重构,使译者能深入了解 TypeScript。它的类型系统异常强大,可以大大降低团队中成员的沟通成本。以往,团队中的成员需要调用另一个成员写的模块时,必须要仔细研究这个模块中各个 API 的参数、参数类型和返回值。然而因为项目中通常缺乏文档与注释(这是另外的讨论点),所以通常在使用其他人开发的模块时会占用程序员大量的时间去阅读和理解其他人的代码。而 TypeScript的类型系统无疑是给了我们一个快捷的文档,使得我们能更好更快地使用别人的模块。即使是在拥有良好的注释以及文档的模块中,TypeScript服务提供的 Intellisense 功能也能让开发人员如虎添翼,再也不用担心忘记参数类型或忘记方法名。
而另一方面, TypeScript过强的约束也在开发时给我们带来了很多额外的困扰。比如在开启了--noImplicitReturns参数后,一些设计成无返回值的代码将会导致编译失败,比如:
getOne(_id: string): string {
const result = cacheService.exist(_id)
if (result) {
return cacheService.findById(_id)
}
}
由于这段代码只有一个分支有返回值,所以它将导致编译失败,但我们正是期待代码这样运行。
同时,我们也接触到了一些 TypeScript 的私有功能,比如 enum(枚举)与 reflectMetaData(元数据反射)。出于对使用非标准特性的风险的考量,我们并没有在项目中使用这些特性。
除了强大的类型系统带来的可靠的静态检查以外,我们还惊喜地发现了一个能大大增加项目可维护性与健壮性的实践,那就是依靠 TypeScript的类与接口将面向对象的 SOLID原则应用到项目中,这无疑是搭了类似 Java 与 C# 等面向对象语言的顺风车,它能让我们更容易地写出高内聚低耦合的代码。
所以在面对社区各种对 TypeScript褒贬不一的评价时,希望读者能理性地看待这些声音,并且能够在深思熟虑之后进一步接触 TypeScript,深入了解它的优点与缺点,最终为自己的项目选择合适的工具。
关于作者
Remo H. Jansen是一位前端工程师、开源项目贡献者、企业家、科技爱好者、游戏爱好者和互联网爱好者。
他来自西班牙的塞维利亚,但目前居住于爱尔兰的都柏林,并在那里做着一份金融服务行业的全职工作。Remo有着多年的大型 JavaScript应用开发经验,从航班预定系统到投资组合管理解决方案。
Remo在 TypeScript社区中十分活跃。他是都柏林 TypeScript交流会的组织者,并且是 InversifyJS(一个 TypeScript应用的控制反转容器)和 AtSpy(一个 TypeScript应用的测试框架)的作者。在他的个人博客(http://blog.wolksoftware.com/)中,他写了许多关于 TypeScript和其他 Web技术的博客。
Remo也是由 Packt Publishing出版,Nathan Rozentals撰写的 Mastering TypeScript一书的技术审校者。
若想要与他取得联系,可以访问 http://www.remojansen.com/。
致谢
这是我出版的第一本书。在此之前,我经历了相当漫长的学习之路,并且从许多值得感谢的人那里,学到了许多知识。我首先要感谢地处特里亚纳圣彼得慈幼会(位于西班牙的塞维利亚)的计算机科学学
院中的老师们,因为他们让我体会到了教育的价值。感谢 Packt Publishing团队的成员们的支持和努力工作,与你们的合作十分愉快。感谢本书的所有技术审校者,他们无价的反馈和努力工作显著地提升了本书内容的质
量。感谢我的同事和室友,Sergio Pacheco Jimenez 和 Adolfo Blanco Diez,因为我常在半夜与前者进行漫长的技术交流,后者为我提供了大量咖啡饮料的支持。感谢我的女朋友,Lorraine,我为你无条件的支持和耐心深感荣幸。你就是世界上最好的女朋友,并且还在不断变得更好。
最后,感谢我的家人,感谢你们相信我,为我提供指导,成为我最好的倾听者,支持我的工作,原谅我所犯的错误,以及其他一切你们教会我的东西。感谢我们在一起所经历的开心与伤心的时光。能够成为你们的孙子、儿子和兄弟,让我十分骄傲。
关于审校者
Liviu Ignat是一位全栈工程师、架构师、科技极客和企业家,从 2004年以来开始编写商业软件。一开始使用的是 VB6,接着开始使用 .NET和 Java,后来转向了 Web前端开发。他对函数式语言十分感兴趣,如 F#、Scala、Swift、JavaScript等。在他的一些最新的服务端 Node.js项目和大多数使用流行前端框架的项目中已经使用上了 TypeScript。
目前,他正致力于许多项目,大多数项目是 http://giftdoodle.com/中的,他是这个公司的 CTO,这家公司中大多数 JavaScript项目都使用 TypeScript编写。在他的工作经历中,他使用.NET编写过分布式后端服务,也编写过复杂的单页 Web应用。最近他正致力于使用 Node.js和 Docker编写微服务,编写单页 Web应用,以编写 Android和 iOS原生应用。
当 Liviu不写代码时,他喜欢在冬天滑雪,在夏天坐帆船去国外,去世界的其他地方旅行。你可以在 http://www.ignat.email/联系到 Liviu。
Jakub Jedryszek目前是微软的一位软件工程师。在审校本书时,他工作于 Azure Portal,这是世界上使用 TypeScript编写的最复杂的单页 Web应用。他也是 .NET开发者的 dotNetConfPL——online会议的共同发起人之一。他的博客是 http://jj09.net/。
Andrew Leith Macrae最初在 Apple 的产品上开始了他的编程生涯。多年以来,他使用过 Hypercard、Director、Flash和最近的 Adobe AIR for mobile 开发交互式应用。并且在开发过程中,他也会用到 HTML。他目前是多伦多 Rogers Communications 公司的高级前端工程师,正在使用 AngularJS和 SASS进行敏捷开发。
他坚信 TypeScript是 JavaScript 的未来,TypeScript带来了强类型面向对象语言中的结构化和规则,为开发大规模 Web应用的代码编写提供了语义上的便利。
你可以在 http://adventmedia.net/联系到 Andrew。
Brandon Mills的编程生涯已经有十多年了,他就职过只有两个人的初创公司,也在微软就职过。他在微软参与了 Visual Studio 2013、Azure Tools 和预装于 Windows 10的 Edge浏览器项目。他也是 ESLint 项目的核心开发团队成员之一,这是一个开源可配置的 JavaScript和 JSX的语法检查工具。他目前在 Node.js平台上使用 JavaScript或 TypeScript编写应用和服务。他的 GitHub是 https://github.com/btmills。
感谢 Scott 的激励和给予我的灵感,感谢 Linda给予我无条件的爱,感谢 Abby给予我的耐心,以及感谢 Ashlynn 对我的支持。
Ivo Gabe de Wolff是一位 ivogabe(创始于 2012年)名下的自由职业开发者,他正在乌得勒支大学学习数学和计算机科学。当他只有 11岁时,便开始使用 Game Maker编写游戏程序。在学了诸如 C# 和 JavaScript等诸多编程语言后,他在现在的大多数项目中使用 TypeScript。在过去的几年里,他在许多不同的环境中使用过 TypeScript,如移动端应用。目前他主要致力于 Node.js 程序的开发。
另外,他也是许多开源项目的作者,包括 gulp-typescript。你可以在 https:// github.com/ivogabe中找到他的项目。如果你想阅读更多有关 TypeScript、JavaScr
Remo H. Jansen 是一位前端工程师、开源项目贡献者、企业家、科技爱好者、游戏爱好者和互联网爱好者。
他来自西班牙的塞维利亚,但目前居住于爱尔兰的都柏林,并在那里做着一份金融服务行业的全职工作。Remo 有着多年的大型JavaScript 应用开发经验,从航班预定系统到投资组合管理解决方案。
Remo 在TypeScript 社区中十分活跃。他是都柏林TypeScript 交流会的组织者,并且是InversifyJS(一个TypeScript 应用的控制反转容器)和AtSpy(一个TypeScript 应用的测试框架)的作者。在他的个人博客(http://blog.wolksoftware.com/)中,他写了许多关于TypeScript 和其他Web 技术的博客。
Remo 也是由Packt Publishing 出版,Nathan Rozentals 撰写的Mastering TypeScript 一书的技术审校者。
前言 .................................... XVIII
1 TypeScript简介 .................. 1
TypeScript的架构 ........................... 1
设计目标 ................................. 1
TypeScript组件 ...................... 3
TypeScript语言特性 ....................... 4
类型 ......................................... 6
变量、基本类型和运算符 ..... 7
流程控制语句 ....................... 14
函数 ....................................... 18
类 ........................................... 20
接口 ....................................... 22
命名空间 ............................... 22
综合运用 ....................................... 23
小结 ... 25
2 自动化工作流程 ................ 26
一个现代化的开发工作流程 ....... 26
准备工作 ....................................... 27
Node.js ................................... 27
Atom ...................................... 27
Git和 GitHub ........................ 30
版本控制工具 ............................... 30
包管理工具 ................................... 34
npm ........................................ 35
Bower..................................... 38
tsd .......................................... 38
自动化任务工具 ........................... 39
检查 TypeScript代码的质量 41
编译 TypeScript代码 ............ 42
优化 TypeScript应用 ............ 44
管理 Gulp任务的执行顺序 . 48
自动化测试工具 ........................... 50
使跨设备测试同步 ....................... 52
持续集成工具 ............................... 55
脚手架工具 ................................... 56
小结 ... 58
3 使用函数 .......................... 59
在 TypeScript中使用函数 ............ 60
函数声明和函数表达式 ....... 60
函数类型 ............................... 61
有可选参数的函数 ............... 62
有默认参数的函数 ............... 63
有剩余参数的函数 ............... 64
函数重载 ............................... 66
特定重载签名 ....................... 67
函数作用域 ........................... 68
立即调用函数 ....................... 71
范型 ....................................... 74
tag函数和标签模板 ............. 77
TypeScript中的异步编程 ............. 78
回调和高阶函数 ................... 79
箭头函数 ............................... 79
回调地狱 ............................... 81
promise .................................. 86
生成器 ................................... 91
异步函数――async和 await 93
小结 ... 93
4 TypeScript中的面向对象编程 ...................................... 94
SOLID 原则 ................................. 95
类 ....... 95
接口 ... 99
关联、聚合和组合 ..................... 100
关联 ..................................... 100
聚合 ..................................... 100
组合 ..................................... 100
继承 . 101
混合 ..................................... 104
范型类 ......................................... 109
范型约束 ..................................... 113
在范型约束中使用多重类型 ......................................... 117
范型中的 new操作 ........... 118
遵循 SOLID原则 ....................... 118
里氏替换原则 ..................... 118
接口隔离原则 ..................... 120
依赖反转原则 ..................... 122
命名空间 ..................................... 122
模块 . 124
ES6模块――运行时与程序设计时 .............................. 126
外部模块语法――仅在程序设计阶段可用 .................. 127
AMD 模块定义语法――仅在运行时使用 .................. 128
CommonJS 模块定义语法――仅在运行时使用 ......... 129
UMD模块定义语法――仅在运行时使用 ................... 130
SystemJS模块定义 ――仅在运行时使用 ..................... 131
循环依赖 ..................................... 131
小结 . 133
5 运行时 .............................134
环境 . 135
运行时的一些概念 ..................... 135
帧 ......................................... 136
栈 ......................................... 137
队列 ..................................... 137
堆 ......................................... 137
事件循环 ............................. 137
this操作符 .................................. 138
全局上下文中的 this操作符 .......................................... 139
函数上下文中的 this操作符 .......................................... 139
call、apply和 bind方法 ..... 140
原型 . 143
实例属性与类属性的对比 . 144
基于原型的继承 ................. 147
原型链 ................................. 151
访问对象的原型 ................. 152
new操作符 .......................... 153
闭包 . 153
闭包和静态变量 ................. 155
闭包和私有成员 ................. 157
小结 . 159
6 应用性能 .........................160
准备工作 ..................................... 160
性能和资源 ................................. 161
性能指标 ..................................... 162
可用性 ................................. 162
响应时间 ............................. 162
处理速度 ............................. 162
延迟 ..................................... 162
带宽 ..................................... 163
可伸缩性 ............................. 163
性能分析 ..................................... 163
网络性能分析 ..................... 163
网络性能与用户体验 ......... 168
GPU性能分析 .................... 172
CPU性能分析 .................... 174
内存性能分析 ..................... 176
垃圾回收器 ......................... 178
性能自动化 ................................. 178
性
— 没有更多了 —
以下为对购买帮助不大的评价