《Learning TypeScript》english edition, 2015
Chap 1 簡介
1.TypeScript設計目標
- 強類型,需編譯
- javascript的超集
- 支持大型工程,提供基于面向對象的類/接口/模塊
- 運行時是javascript代碼
- 與ECMAScript標準對齊,支持ECMAScript6
- 支持跨平臺的開發工具
2.npm環境下安裝:npm install -g typescript
。編譯:tsc test.ts
。
3.強類型語言,使用:加類型聲明變量,支持自動推導。類型有:
- any:所有類型的父類型,可以賦值為任意類型
- void:空類型,例如函數返回值為空可以設置為void
- boolean:布爾類型,true/false
- number:數字類型
- string:字符串類型
- Array:數組類型,兩種聲明方式:
var list:number[]=[1,3,5];
var list:Array<number>=[2,4,6];
- enum:枚舉類型,例如
enum Color{Red,Blue,Green}; var c:Color=Colr.Green;
Javascript中的undefined和null不能作為類型使用。undefined表示變量聲明未初始化:var test;alert(test);//undefined
。null表示一個特殊值:var test=null;alert(test);//null
。
4.類型定義:
- var:對象作用域,與Jacascript中相同
- let:塊級作用域,不允許重復定義
- const:塊級作用域,不可修改,不允許重復定義
5.union聯合類型,例如:
var path:string[]|string;
path = 'www';
path = ['http','www'];
6.類型別名,例如:
type PrimitiveArray = Array<string|number|boolean>;
type Callback = ()=>void;
7.外部類型聲明,用于提供typescript中未定義的類型使用時不包錯,如Jquery中的$。例如:
interface ICustomConsole{
log(arg:string):void;
}
declare var customConsole:ICustomConsole;
這樣便可以使用customConsole而不報錯console.log也是這樣實現的,其聲明存放在declaration files/type defination files文件中,例如lib.d.ts。
8.函數:
- 有名函數:
function greet(name?:string)string{...}//?表示可選
- 匿名函數:
var greet=function(name?:string):string{...}
-箭頭函數:()=>{},例如:var greet=(name:string)=>{...}
,可用于聲明對象類型:var greet:(name:string)=>{...}
9.類:使用class聲明,默認屬性/方法是public的,構造函數是constructor。
10.接口:使用interface聲明。
11.命名空間:使用namespace聲明,內部模塊,里面的接口,類,變量使用export修飾后外部可見。是typescript本身支持的模塊系統,用于隔離內部作用域。
12.模塊:外部模塊,用于公共代碼導入導出(import和export)。
Chap 2 常用工具
前端常用工具如下:
- 環境:node.js
- IDE:vscode/atom
- 代碼管理:git/github
- 包管理:npm/bower,此外,tsd用于定義typescript識別第三方庫,如jquery
- 任務執行:grunt(基于文件)和gulp(基于流)
- 測試工具:karma/jesmine
- 持續集成:jenkins/travis CI
- 腳手架:yeoman
關于模塊化工具,有三種規范:
- CommonJS:定義javascript在不同環境中執行的規范,如非瀏覽器環境。node.js就是按照這個規范實現的。采用:require引用模塊,export導出模塊,module定義模塊。常用的轉換工具有browserify和webpact。
- AMD:CommonJS定義的規范是同步執行的,對于瀏覽器和服務端都是如此。但是不同于服務端的本地文件,瀏覽器需要網絡下載,同步執行容易造成瀏覽器卡頓,因此出現異步模塊定義:AMD。模塊加載不影響后面語句的執行,加載完成后調用回調函數執行依賴模塊的語句。AMD更適合瀏覽器中運行不同模塊javascript。實現的工具有:require.js和curl.js。
- CMD:Common module defination,國內發展出來的,瀏覽器實現是seaJS。
AMD和CMD最大的區別是對依賴的執行時機不同,而不是加載的時機或者方式。AMD加載完成后執行回調函數,執行順序與書寫順序可能不同,所有模塊加載完成后執行主邏輯。CMD加載完成依賴后不執行,只是下載,所有模塊加載完后執行主邏輯,只有遇到require才執行對應的模塊,模塊的執行順序與書寫順序一致。