TypeScript將標記爲* .d.ts
的文件視爲定義文件。 這些文件旨在使用TypeScript來描述由JavaScript庫提供的接口。java
JavaScript的缺點:git
- 弱類型,缺少必要的類型檢查
- 編程不夠語義化,代碼可閱讀性差
- 代碼不可分割,可維護性差
- 開發工具不夠智能
TypeScript 是一種由微軟開發的自由和開源的編程語言。它是一種JavaScript的一個超集。並且本質上向這個語言添加了可選的靜態類型和基於類的面向對象編程。github
Link: (http://www.typescriptlang/org)typescript
解決的問題:編程
強類型 智能感知和重構 徹底兼容Javascript 語義化編程和麪向對象 集成簡便json
TypeScript將來的發展趨勢:數組
- 替代Javascript
- 更多的IDE支持
- 不斷豐富的Javascript庫支持
TypeScript面向對象編程語言
封裝函數
- 使用class關鍵字來代表聲明類
- 使用contructor關鍵字來聲明構造函數
- 使用private關鍵字來聲明私有成員
- 可使用get/set來實現私有成員訪問器
- 支持靜態屬性
繼承工具
- 使用extends關鍵字來完成繼承
- 使用super關鍵字來訪問父類
模塊
- 模塊的概念等同於C#中的命名空間 (相似java中的package)
- 使用module關鍵字來聲明模塊
- 在模塊中默認成員都是私有的
- 在模塊中使用export關鍵字聲明公有資源
- 模塊支持跨文件分隔
- 在Node.js/Require.js中使用require關鍵字導入模塊
- 可使用import關鍵字來聲明模塊的別名
方法
- 方法是Javascript中一個特殊的對象
- 方法分爲命名方法和匿名方法
- 方法類型
- 方法推斷類型
- 方法參數能夠定義默認值
- 方法參數可使用「...」 去定義可變參數組
重載
- Javascript中自己是不支持重載的
- 在TypeScript中使用重載的方法: 一、先聲明出全部的方法重載的定義,不包含方法實現 二、再聲明出一個參數爲Any類型的重載方法 三、實現Any類型的方法,並經過參數類型不一樣來去實現重載
接口
在接口中能夠包含屬性、方法 使用interface關鍵字定義接口 屬性可使用 ? 標識容許爲空類型 TypeScript支持隱式接口 接口能夠標識爲方法類型 接口支持多繼承 可使用<接口類型>{}來去隱式聲明匿名對象實現接口
接口是一個抽象類型,它不像
類
同樣包含任何代碼。 它僅定義API的「簽名」或形狀。 在代碼轉換期間,interface
不會生成任何代碼,它僅在開發期間被Typescript用於類型檢查。
泛型方法
模塊的導入和導出
模塊在其自身的做用域裏執行,而不是在全局做用域裏;這意味着定義在一個模塊裏的變量,函數,類等等在模塊外部是不 可見的,除非你明確地使用export之一導出它們。 相反,若是想使用其它模塊導出的變量,函數,類,接口等的時候,你 必需要導入它們,可使用import之一。 模塊是自聲明的。在TypeScript裏,兩個模塊之間的關係是經過在文件級別上使用import和export創建的。下面是一個基本例子:
由於JavaScript存在兩種不一樣的模塊引用方式,在編譯成JavaScript時,能夠經過TypeScript配置文件tsconfig.json指 定編譯以後的模塊引用方式
導入和導出的重命名
模塊導入和導出時默認使用的內部對象的名稱。TypeScript也支持在導出前和導入後進行重命名。將上面的例子修改一下
** 或者,若是不知道導入模塊的名稱,則能夠用*號代替**
上面的例子裏,對*號代替的全部模塊進行重命名爲animal_module,則經過animal_module對象能夠訪問到模塊裏導出的全部內容。
導出和導出多個對象
默認導出
動態加載模塊
在JavaScript裏,模塊加載方式分別有兩種:CommonJS和AMD。在用TypeScript時,要根據最終編譯生成JavaScript的方式的配置內容不一樣,編寫不一樣的代碼。
命名空間與模塊的區別:
命名空間: 代碼層面的歸類和管理。將有類似功能的代碼都歸一到同一個空間下進行管理,方便其餘代碼引用。更多的是側重代碼的複用。
模塊: 一個完整功能的封裝,對外提供的是一個具備完整功能的功能包,須要顯式引用。一個模塊裏可能會有多個命名空間。
一、命名空間的聲明
同Java的包、.Net的命名空間同樣,TypeScript的命名空間能夠將代碼包裹起來,只對外暴露須要在外 部訪問的對象。命名空間內的對象經過export關鍵字對外暴露。
經過namespace關鍵字聲明命名空間,經過export導出須要在外部使用的對象。在命名空間外部需 要經過**「徹底限定名」**訪問這些對象。
二、命名空間的引用
三、命名空間的別名