-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Learning TypeScript中文版

( 簡體 字)
作者:龍逸楠,蔡偉,迷走類別:1. -> 程式設計 -> 網路編程 -> Javascript
譯者:
出版社:電子工業出版社Learning TypeScript中文版 3dWoo書號: 45504
詢問書籍請說出此書號!

缺書
NT售價: 445

出版日:10/1/2016
頁數:344
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121300479
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

譯者序
在 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應用的測試框架)的作者。
致謝
這是我出版的第一本書。在此之前,我經歷了相當漫長的學習之路,并且從許多值得感謝的人那里,學到了許多知識。我首先要感謝地處特里亞納圣彼得慈幼會(位于西班牙的塞維利亞)的計算機科學學
院中的老師們,因為他們讓我體會到了教育的價值。感謝 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會議的共同發起人之一。
Andrew Leith Macrae最初在 Apple 的產品上開始了他的編程生涯。多年以來,他使用過 Hypercard、Director、Flash和最近的 Adobe AIR for mobile 開發交互式應用。并且在開發過程中,他也會用到 HTML。他目前是多倫多 Rogers Communications 公司的高級前端工程師,正在使用 AngularJS和 SASS進行敏捷開發。
他堅信 TypeScript是 JavaScript 的未來,TypeScript帶來了強類型面向對象語言中的結構化和規則,為開發大規模 Web應用的代碼編寫提供了語義上的便利。
Brandon Mills的編程生涯已經有十多年了,他就職過只有兩個人的初創公司,也在微軟就職過。他在微軟參與了 Visual Studio 2013、Azure Tools 和預裝于 Windows 10的 Edge瀏覽器項目。他也是 ESLint 項目的核心開發團隊成員之一,這是一個開源可配置的 JavaScript和 JSX的語法檢查工具。他目前在 Node.js平臺上使用 JavaScript或 TypeScript編寫應用和服務。
感謝 Scott 的激勵和給予我的靈感,感謝 Linda給予我無條件的愛,感謝 Abby給予我的耐心,以及感謝 Ashlynn 對我的支持。
Ivo Gabe de Wolff是一位 ivogabe(創始于 2012年)名下的自由職業開發者,他正在烏得勒支大學學習數學和計算機科學。當他只有 11歲時,便開始使用 Game Maker編寫游戲程序。在學了諸如 C# 和 JavaScript等諸多編程語言后,他在現在的大多數項目中使用 TypeScript。在過去的幾年里,他在許多不同的環境中使用過 TypeScript,如移動端應用。目前他主要致力于 Node.js 程序的開發。
另外,他也是許多開源項目的作者,包括 gulp-typescript。
前言
在過去的幾年里,基于 JavaScript的 Web應用的數量呈幾何級數進行增長。但是,目前的 JavaScript標準( ECMAScript 5,又稱 ES5)是在許多年前設計出來的,面對如今大規模 JavaScript應用的復雜性時,它缺少了許多必要的特性。正是由于這些特性的缺失,一些應用的可維護性問題暴露了出來。
新一代的 JavaScript標準(ECMAScript 6,又稱 ES6),旨在解決上述可維護性問題。但它還沒有完全實現,且現在我們使用的瀏覽器與之也不是完全兼容的。所以,ES6標準的廣泛采用,仍被認為是一個漫長的過程。
為了解決這類 JavaScript的可維護和可擴展性問題,微軟花了兩年時間開發出 TypeScript,并在 2012年 10月,公開發布了它:
“我們為需要構建和維護大型 JavaScript程序的團隊設計了 TypeScript,以滿足他們的需求。TypeScript可幫助他們在軟件組件之間定義接口,并且幫助理解現存 JavaScript庫的行為。同時,使用 TypeScript的團隊可以將代碼構建成動態加載的模塊,以減少命名沖突的問題。TypeScript可選的類型系統使開發者們可以使用一些高效的開發工具和最佳實踐:靜態檢查,基于符號的導航,代碼補全和代碼重構。”
——TypeScript語言特性 1.0
即使是具有豐富經驗的開發者,也很難給出大規模 JavaScript應用明確的定義。當談及這個話題時,我們應該避免使用代碼行數來作為評判標準,而是應該以代碼中模塊的數量和模塊之間的依賴關系來評判應用的規模。我們將大規模應用定義為,需要眾多開發者一同維護且具有一定復雜度的程序。
本書將會運用簡單且易于理解的形式來介紹 TypeScript眾多的特性。當你讀完本書時,你應該知曉用 TypeScript構建大型 JavaScript應用所需的所有知識。本書不但提供了 TypeScript核心特性的介紹,還會帶領你探索一些有用的工具、代碼設計規則、昀佳實踐以及如何將它們用于生產環境中。
本書涉及的內容
第 1章介紹了 TypeScript的核心特性,包括可選的靜態類型提醒系統、操作符、函數、接口和模塊。同時還附有在實際環境中使用它們的例子。
第 2章介紹了一些自動化工具,如 Gulp和 Karma,用以昀大化開發者的生產力。另外,本章還介紹了一些在開發 TypeScript應用時,有助于你使用第三方庫的工具。
第 3章深入探討了 TypeScript中的函數。為了成為一個精通 TypeScript的開發者,本章還會告訴你關于異步編程需要知曉的一些知識。
第 4章深入探討 TypeScript中的面向對象編程,包含類、接口和模塊,并且推薦了一些昀佳實踐(SOLID原則1)。還會包括如繼承、混入和泛型,它們都有助于增強代碼的可復用性。
第 5章幫助你理解 TypeScript運行時的工作機制,將有助于避免一些潛在的性能問題,使得我們成為更高效的 TypeScript開發者。
第 6章講解了高效運用可用的系統資源的必要知識。這一章還會闡述測試 TypeScript應用性能的方法,以及如何自動化一些用于提升 TypeScript應用性能的任務。
第 7章介紹了如何使用 TypeScript測試工具來進行 BDD(行為驅動開發)測試。在這一章,你將學習到如何使用 Karma、Mocha、Chai和 Sinon.JS來編寫 TypeScript單元測試,如何使用 Nightwatch.js編寫端對端測試,以及如何使用 Istanbul來生成測試覆蓋率報告。
第 8章深入探討了裝飾器,包括類、屬性、參數和方法裝飾器。該章還會包括關于反射元數據 API 的介紹。
第 9章介紹了一些現代 Web應用的核心架構原則。該章會介紹單頁面 Web應用的概念,以及它的通用組件和特性(模型、視圖、控制器、路由和模板等)。該章還會通過實現一個單頁面 Web應用框架,來闡述你所需知道的一切。
第 10章通過使用 TypeScript以及本書其他章節所提到的概念,來實現一個單頁面 Web應用。

閱讀本書前需要做的準備
本書中的例子都是使用 TypeScript 1.5編寫的,你需要 TypeScript編譯器和一個文本編輯器。本書將會說明如何使用 Atom,但是你也可以使用其他的編輯器,如 Visual Studio 2015、Visual Studio Code或 Sublime Text。
你還需要一個能夠上網的環境來下載一些必要的依賴引用、包和庫,如 jQuery、Mocha和 Gulp。在一些操作系統下安裝本書中的一些工具,你可能還需要一個擁有管理員權限的賬號。

本書的讀者對象
如果你是一個想要學習 TypeScript來編寫漂亮的 Web應用的中等水平的 JavaScript開發者,那么本書正適合你。你只需對 jQuery的基本概念有所了解。
為了讓你能昀大化地運用 TypeScript語言和其編譯器,本書將會由淺入深地介紹 TypeScript的語言結構和面向對象的特性。本書還將展示,如何使用強類型、面向對象的原則、設計模式和一些昀佳實踐來輕松管理復雜的大規模 JavaScript應用。

約定慣例
本書將會使用不同的書寫風格來區分不同種類的信息。以下是這些風格的例子和它們的意義。
正文中的代碼、數據庫表名、文件夾名、文件名、文件擴展名、路徑名、 URL、用戶輸入和推特用戶定位將會用代碼體書寫,如“我們可以通過 include指令將其他上下文包含進來”。
代碼塊則會是下面這樣的風格:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {

return "Hello, " + this.greeting; } }
如果希望向你強調代碼塊中的一部分,那么它們將會以粗體展示:
function MathHelper() { /* ... */ }
// class methodMathHelper.areaOfCircle = function(radius) {return radius * radius * this.PI; }
// class property MathHelper.PI = 3.14159265359;
任何命令行的輸入和輸出將是以下這樣的:
git clone https://github.com/user-name/repository-name.git

警告和關鍵提醒將會在這樣的圖標后出現。
小提示和小技巧將會在這樣的圖標后出現。
勘誤表
雖然我們已經盡力謹慎地確保內容的準確性,但錯誤仍然存在。如果你發現了書中的錯誤,包括正文和代碼中的錯誤,請告訴我們,我們會非常感激。這樣,你不僅幫助了其他讀者,也幫助我們改進后續的出版。如發現任何勘誤,可以在博文視點網站相應圖書的頁面提交勘誤信息。一旦你找到的錯誤被證實,你提交的信息就會被接受,我們的網站也會發布這些勘誤信息。你可以隨時瀏覽圖書頁面,查看已發布的勘誤信息。
內容簡介:

本書首先介紹了TypeScript 的基本語法和基本的自動化工作流配置方法,然后從面向對象入手,著重介紹了面向對象的概念和它的一些最佳實踐,并結合例子講解了如何基于TypeScript 的類型系統應用這些最佳實踐。隨后剖析了TypeScript 在編譯后的運行時行為,并從性能與測試的角度講解了如何編寫健壯的TypeScript 代碼,所以書中還包括了性能分析與測試相關的內容。最后介紹了如何使用TypeScript 結合面向對象、MVC 等概念,結合本書前面提到的自動化的工作流、面向對象最佳實踐、性能優化和測試等內容實現一個單頁應用(SPA)框架,并用這個框架構建了一個單頁應用。

目錄:

前言 ............ 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
性能優化自動化 ....... 178
性能監測自動化 ....... 179
性能測試自動化 ....... 180
錯誤處理 ............. 180
Error類 ............ 181
try…catch 語句和 throw 語句 ............. 182
小結 . 182

7 應用測試 .........183
軟件測試術語表 ......... 183
斷言 ............. 184
測試規范 ........... 185
測試用例 ........... 185
測試套件 ........... 185
測試監視 ........... 185
替身 ............. 185
測試樁 ........... 185
模擬 ............. 185
測試覆蓋率 ......... 186
必要的準備 ........... 186
Gulp ............. 187
Karma ............ 187
Istanbul ............ 187
Mocha ............ 187
Chai .............. 188
Sinon.JS ........... 188
類型定義 ........... 188
PhantomJS ......... 189
Selenium和 Nightwatch.js 189
測試計劃和方法 ......... 190
測試驅動開發 ....... 190
行為驅動測試 ....... 191
測試計劃和測試類型 ... 191
建立測試基礎結構 ....... 192
使用 Gulp構建這個程序 . 193
使用 Karma運行單元測試 197
使用 Selenium和 Nightwatch.js運行 E2E測試 ..... 200
使用 Mocha和 Chai創建測試斷言、規范和套件 ..... 203
測試異步代碼 ....... 207
斷言異常 ........... 208
Mocha和 Chai的 TDD與 BDD對比 ......... 209
使用 Sinon.JS編寫測試監視和測試樁 ........... 209
測試監視 ........... 213
測試樁 ........... 215
使用 Nightwatch.js創建端對端測試 ............. 216
生成測試覆蓋率報告 ....... 217
小結 . 220

8 裝飾器 ...........221
條件準備 ............. 221
注解和裝飾器 ........... 222
類裝飾器 ........... 223
方法裝飾器 ......... 226
屬性裝飾器 ......... 228
參數裝飾器 ......... 230
裝飾器工廠 ......... 232
帶有參數的裝飾器 ..... 234
反射元數據 API ....... 235
小結 . 239

9 應用架構 .........240
單頁應用架構 ........... 241
MV* 架構 ............. 246
MV* 框架中的組件和功能 ... 247
model ............. 247
collection ........... 248
item view ........... 248
collection view....... 249
controller .......... 250
事件 ............. 251
路由和 hash (#) 導航 .... 251
中介器 ........... 254
調度器 ........... 255
客戶端渲染和 Virtual DOM .............. 256
用戶界面數據綁定 ..... 256
數據流 ........... 258
Web component 和 shadow DOM ........... 259
選擇一個程序框架 ....... 260
從零開始實現一個 MVC框架 .. 261
準備工作 ........... 262
程序事件 ........... 264
中介器 ........... 265
程序組件 ........... 268
路由表 ........... 270
事件發射 ........... 271
路由 ............. 272
調度器 ........... 275
controller .......... 279
model和 model settings .. 280
view和 view settings..... 283
框架 ............. 287
小結 . 288

10 匯總 ...........289

準備工作 ............. 289
程序依賴 ............. 290
程序中的數據 ........... 291
程序架構 ............. 292
程序文件結構 ........... 293
配置自動構建流程 ....... 294
程序布局 ............. 297
實現根組件 ........... 298
實現 market controller ....... 299
實現 NASDAQ model ....... 302
實現 NYSE model ......... 303
實現 market view ........ 304
實現 market模板 ........ 306
實現 symbol controller...... 308
實現 quote model ...... 309
實現 symbol view ........ 311
實現 chart model ......... 313
實現 chart view ......... 316
測試應用 ............. 318
準備發布程序 ........... 319
小結 . 320
序: