TypeScript的主要特性
-
超集 :TypeScript 是 JavaScript 的一個超集。
-
類型系統 :正如其名,TypeScript在JavaScript的基礎上,包裝了類型機制,使其變身爲
靜態類型語言。
-
編輯器功能 :加強了編輯器和IDE功能,包括代碼補全、接口提示、跳轉到定義、重構等。
-
錯誤提示 :能夠在編譯階段就發現大部分錯誤,幫助調試程序。
JavaScript的特色
-
JavaScript 是一種輕量級的解釋性腳本語言。
-
JavaScript 是弱類型、動態類型語言,容許隱式轉換,只有運行時才能肯定變量的類型。
超集
也就是說,你不是「不用JavaScript開發而改用TypeScript」了,本質上開發語言仍是JavaScript,只是TypeScript在JavaScript的基礎上擴展了新的特性,JavaScript該有的,TypeScript都有。
爲何TypeScript的靜態類型能加強代碼的可讀性和可維護性
TypeScript經過類型註解提供編譯時的靜態類型檢查。
編程語言可簡單地看做對一系列變量的處理,變量從某個維度上講是創建在類型系統上的,就像客觀世界萬物也是由各類類型組成。
首先是基礎的類型,表明計量的數字類型,表明身份的字符串類型,表明邏輯是否的布爾類型,表明集合的對象(含數組),表明存在性的'空'。
而後是各類自定義的類型,某樣生活用品、某種職業,即面向對象編程裏的對象、類、接口的概念。
這也符和人對事物的廣泛認知,從一個類型,就能大體知道它是什麼、怎麼能獲得它、它能作什麼,減小查閱、理解、校驗的過程,最好的狀況是無需將關注點轉移……
最強大的地方還不在於基礎類型的註解,而在於自定義類型(接口或類)、內置對象(HTMLElement,Event等)的提示。
以confirmAddFruits這個組件中方法和fruits.service這個服務層的函數爲例。
1. 它是什麼
-
去fruits.service.js看看,它是http請求傳給後端的參數,是個對象。
-
到接口文檔看看。
-
是個Fruit類型的對象。
-
操做編輯器能直接顯示fruit含有id, name, isFresh屬性,每一個屬性是什麼類型。
2. 怎麼能獲得它:
去data處看看,初始值是null(由於某些須要,初始值不能是[]),最多從命名推測應該是個數組,但數組是怎麼構成的,還得回想或查一下model層、view層的設計。
操做編輯器能直接顯示fruits的類型是Fruit[],即Fruit類型的單項構成的數組,因而操做數組合並。
3. 它能作什麼
this.fruitService.addFruit 是調用服務層的方法,它返回什麼?
返回 Observable<Fruit> ,訂閱之,獲得的數據是Fruit類型:一個水果。
// confirmAddFruits.js
export default {
data() {
return {
fruits: null,
isShowModal: false;
}
}
confirmAddFruit(fruit) {
this.fruitService.addFruit(fruit).then(fruit => {
this.fruits = [fruit, ...this.fruits];
this.isShowModal = false;
});
}
}複製代碼
// confirmAddFruit.ts
interface Fruit {
id: number;
name: string;
isFresh: boolean
}
export class FruitsComponent {
fruits: Fruit[] = [];
isShowModal = false;
confirmAddFruit(fruit: Fruit): void {
this.fruitService.addFruit(fruit as Fruit).subscribe((fruit: Fruit) => {
this.fruits = [fruit, ...this.fruits];
this.isShowModal = false;
});
}
}複製代碼
// fruits.service.js
function addFruit(fruit) {
// ...
}複製代碼
// fruits.service.ts
function addFruit(fruit: Fruit): Observable<Fruit> {
// ...
}複製代碼
可讀性和可維護性
JavaScript所能作的
-
依靠編碼規範,命名、註釋(特別是類型的註釋)。
-
對本身編寫代碼和維護他人代碼的熟悉度。
-
編輯器的搜索、替換、重構等功能,代碼提示、補全。(搜索替換易出錯)
-
自動測試、手動測試。
-
運行錯誤的提示。
TypeScript所能作的
函數參數的傳遞是是最容易出錯出bug的地方之一,有了類型註解,就能一目瞭然得知道須要傳遞什麼樣的參數,防止遺漏、誤刪。
引用類型數據相較於基本數據類型,數據的維護難度更大,有了接口定義,就再也不混亂。
此外,在編譯階段的類型檢查和錯誤提示,能夠取代不少單元測試所須要的工做。
加強的編輯器功能
TypeScript提供了靜態的代碼分析,在編譯以前,能夠過濾掉大部分錯誤,而JS是沒法作到的。
錯誤提示
-
表單輸入的數字,獲取到的是字符串。
-
函數參數(尤爲是數量)的檢查。不管是輸入時,仍是編譯時的檢查。
-
最強大的不在於JS類型的提示,而在於自定義類型(接口或類)的提示。具體項的提示,編輯器中搞定,不用切換視口。
缺點
惟一的就是:寫類型定義會必定程度上下降開發效率,可是在大項目中可折衷進行,磨刀不誤砍柴工。
最後的彩蛋
TypeScript最強大的應用場景:代碼分支合併衝突解決、項目重構的安全保障。
類型系統符合人對事物的廣泛認知,提供了強力的安全保障機制,智能提示大大提升代碼編寫效率!
編程