為甚麼要學習 Typescipt,或是說 為什麼要用Typescipt 呢,Typescipt 又有什麼樣的優點跟有什麼基本語法呢?
Typescript 對 Javascript 主要是多了靜態類型檢查
而靜態類型檢查有什麼好處?
最主要是因為 "靜態類型更有利於構建大型應用"。為什麼靜態類型有利於構建大型應用?主要有兩點。
即你編寫的代碼甚至沒有被執行到,一旦你在 coding 時發生型別不一致時,語言在編譯階段甚至在運行就可以被發現。針對大型應用,因為 Javascript 測試相對困難,很多程式並不一定能夠在所有條件下執行到,因此也很難知道當下執行的型別,容易造成執行時期錯誤。
像是 jQuery API Documentation 中的 jQuery.ajax,在 documentation 中,有詳盡地解釋了每一個參數詳細的型別.
如果沒有 documentation,我們只看這個函式的宣告方式外,根本不可能把這個用法用對。 大型網站方法更是許多,呼叫方式相當複雜,不可能每個函數都有人編寫文件,所以靜態型別就非常重要.它提供了基本的參數約束.
假如你的代碼像的jQuery這樣所有函數基本全是API,根本沒什麼內部函數,而且邏輯關係看起來顯而易見,這確實跟大型應用搭不上關係,那麼靜態類型對閱讀程式確實沒什麼幫助
假設你一開始寫 Typescript 而不是學 Javascirpt 的話,有些 Js 舊有的特性你可能會不知道,
有些第三方的JS庫缺失D定義檔(xx.d.ts)或者更新不即時。會導致不能便利的使用它或者呼叫了過時的方法或是函式
而且還強制你寫一堆繁瑣的介面型別。而且有些js的方式它還不相容,甚至還 閹割了JS的一些技法。這是我目前使用上遇到的一些主要問題.
let havaMoney: boolean = true;
let persons: number = 0;
let name: string = "TS";
let Arr: any[] = [];
or
let Arr: Array<any> = [];
enum Num {
One = 0,
Two = 1,
Three = 2
}
//// 使用 Enum 判斷類型
if(num === Num.One){
//// 程式碼
}
//// Enum 不存在,跳出錯誤
if(num === Num.Two) {
//// 程式碼
}
//// 程式碼不容易閱讀
if(num === Num.Three) {
//// 程式碼
}
var data: any;
與JavaScript差別的地方是可以對函式定義傳入與回傳的型別,來避免傳錯不正確的型別參數。
傳入型別 回傳型別
function getDiscountPrice(price: number): number {
if (price > 200) {
return price * 0.8
}
return price;
}
/// JS
var Num = ['one', 'two', 'three'];
for(var NumKey in Num) {
console.log(NumKey); //// 輸出 0, 1, 2
}
/// TS
var people = ['one', 'two', 'three'];
for(var NumKey of Num) {
console.log(NumKey); //// 輸出 'one', 'two', 'three'
}
具有建構式、屬性的特性。
class Home {
name: string;
constructor(name: string){
this.name = name;
}
getAdress(): string {
//程式邏輯
}
}
物件導向中,會使用Property來表示一個Class所擁有的資料。
/// property 預設都是 public, 不希望被外部存取的話
///,必須要自己加上private關鍵字
class Home {
name: string;
phone: number;
private adress: string;
}
在初始化Class時,同時替Class指派一些初始值。
class Home {
name: string;
phone: number;
constructor(private adress: string;){
this.name = "Giant";
this.phone = 123456;
}
}
根據需求撰寫子類別,並且可以複寫父類別的程式碼。
class Animal {
Say(){
console.log('I\'m Animal')
}
}
class Dog extends Animal {
Say(){
super.Say();
console.log('I\'m Dog');
}
}
var dog = new Dog();
dog.Say();
class如承接了Interface,就必須遵循且實作所定義的Property或Function,實做類別的關鍵字是implements。
interface Home {
name: string;
phone: number;
}
function homeInfo(home: Home) {
alert("name: " + home.name + " phone: " + home.phone);
}
網路上有很多有關於 Typescript的學習資源,除了官網的 Typescipt 介紹外,還有保哥的 Typescipt教學 以及,對外翻譯的 Typescript都是非常好的學習資源