TypeScript 旅途1:基礎類型

TypeScript

相信你在寫JavaScript代碼的時候也碰到過很頭疼的時刻,好比對象的屬性名或方法名大小寫錯了,或是記不得某個對象有沒有某個屬性,懼怕最新的ES標準有的瀏覽器尚未支持...等等種種問題,那麼你須要使用TypeScript,你會愛上她的(●'◡'●)。git

  • TypeScript是JavaScript的超級,她是靜態類型檢查的github

    這就意味着,你的變量、函數參數、返回值等等都是肯定類型的,當你試圖使用不兼容的類型,那麼你的開發工具會提示你錯誤,而且拒絕給你編譯。typescript

  • 開發工具智能提示express

    主流的開發工具都支持TypeScript,智能提示會讓你感受像是在使用Idea來寫Java代碼同樣的享受。編程

  • 方便的代碼重構segmentfault

    面向對象與接口編程,擁有很是清晰的代碼結構,可讀性大大提升。數組

  • 容易上手,初次接觸,也能看懂瀏覽器

    高度兼容原生腳本語法,對語法的破壞性較少,即便沒接觸過的人,也能很快上手,初次閱讀也沒有什麼障礙。less

本着解決JavaScript的糟糕之處,這注定是個不平凡的開源項目。
Phaser、Cocos2dx、laybox、白鷺等等遊戲引擎都有TS版本。更多的使用TypeScript的開源項目能夠參考這裏函數

關於開發環境搭建與調試配置能夠參考這裏

下面正式介紹TypeScript的基礎類型,不管學習一門什麼語言,從基礎類型開始都再合適不過了。

  • 先介紹兩個關鍵字let和const
//let const
//let 定義的變量有一個新的變量環境
for (let i = 0; i < 10 ; i++) {
    setTimeout(function() {console.log(i); }, 100 * i);
}

//const 定義的變量屬於常量,不能更改
const a: number = 19;
//a = 20;//錯誤,不容許改變常量
const alian = {
    name: "alian",
    age: 35
}

// 錯誤,由於alian是const定義的
// alian = {
//     name: "haha",
//     age:22
// }

let定義的變量不會像var定義的變量那樣污染全局環境。
const定義一個對象的時候,能夠修改對象的屬性值,可是不能修改對象引用。

  • 布爾類型
// 布爾類型
 let success: boolean = true;
 let failed: boolean = false;

類型名boolean定義一個布爾類型,值爲truefalse。若是不寫類型名,則會自動推斷出類型。

  • 數字類型
// 數字類型
 let dec: number = 9;//10進制
 let hex: number = 0xABCD;//16進制
 let bin: number = 0b1011;//二進制
 let octal: number = 0o123;//八進制

關鍵字number定義一個數字類型,值能夠是二進制(0b開頭)、八進制(0o開頭)、十進制、十六進制(0x開頭)。

  • 字符串
// 字符串
 let hello: string = "hello";
 let world: string = 'world';
 let today: number = 1.26;
 let express: string = `${hello} ${world}, today is ${today}`;//模版字符串

關鍵字string定義一個字符串變量。
使用``定義一個多行字符串(能夠帶有表達式 ${變量名})。

  • 數組
// 數組
 let numbers: number[] = [0x1, 0o32, 0b11, 3, 2, 1];
 let names: string[] = ['ana', 'hello', `${hello} + ${world}`];
 let result: Array<boolean> = [true, false, !1];//數組泛型,Array<元素類型>

類型名稱[] 定義一個指定類型的數組。
Array <類型名稱> 一樣定義一個指定類型的數組。

  • 元組 Tuple
//元組 Tuple
 let x: [string, number, boolean];
 x = ['name', 35, false];
 
 console.log(x[0].substr(1)); //ame
 console.log(x[1].toString()); //35

[類型名、類型名...] 定義一個元組,一個元組裏能夠包含幾個不一樣類型的變量。

  • 枚舉
//枚舉
 enum Color {Red = 1, Green, Blue}
 let color: Color = Color.Blue;
 let color2: string = Color[2];
 console.log(color2); //Green

很是有用的一種類型。關鍵字enum name{value...} 定義一個枚舉。默認狀況下,從0開始爲元素編號,能夠手動設置一個數字編號,後面沒有設置編號的會依次往上疊加。
TypeScript 2.4開始支持枚舉成員變量包含字符串構造器,如enum Color {Red = 'a', Green = 'b', Blue = 'ccc'},只是每一個元素的編號都要手動設置,須要注意的是字符串枚舉成員不能被反向映射到枚舉成員的名字。 換句話說,你不能使用 Color["a"] 來獲得 "Red" 。。
有了枚舉就能夠把同類型可是互斥的變量定義成一個枚舉,而不用定義成一些變量了(好比描述一個音量開關按鈕的開關狀態等等)。

  • Any
//Any
 let y: any = 4;
 y = false;
 y = 'type not sure';
 //y.name();
 console.log((y as string).length); //13

 let anyArray: Array<any> = [false, 'true', 23];

雖然是強類型的,可是有了any就有了自由。一個定義爲any類型的變量,在使用的過程當中能夠改變它的值類型,甚至能夠調用它的方法,可是須要當心,若是沒有這個方法,會出異常。
不存在的方法

  • Void
//Void
 function noReturn(): void {
     console.log('no return function');
 }

 let useless: void = null;
 useless = undefined;

某種程度上來講,void類型像是與any類型相反,它表示沒有任何類型。好比定義一個方法沒有返回值。
聲明一個void類型的變量沒有什麼大用,由於你只能爲它賦予undefinednull

  • Null 和 Undefined
//Null 和 Undefined
 let u: undefined = undefined;
 let n: null = null;
 let age: number = undefined;
 let married: boolean = null;

void類似,它們的自己的類型用處不是很大。
默認狀況下nullundefined是全部類型的子類型。 就是說你能夠把 nullundefined賦值給其它類型(好比numberstring等等)的變量。

  • Never
//Never
 function fail(message: string): never {
    throw new Error(message);
 }

一樣是一個沒什麼用的類型。never類型表示的是那些永不存在的值的類型。 例如, never類型是那些老是會拋出異常或根本就不會有返回值的函數表達式或Lambda表達式的返回值類型。

  • 類型斷言
let y: any = 4;
 y = false;
 y = 'type not sure';
 //y.name();
 console.log((y as string).length); //13
 console.log(<string>y.length); //13

當我肯定某個變量是什麼類型的時候可使用類型斷言,明確告訴編譯器我知道它是什麼類型。類型斷言使用y as string或者 y 兩種方式都行。

九層之臺,起於壘土,千里之行,始於足下。有了類型基礎,就能夠對TypeScript進行下一步的觀光學習了。
公衆號二維碼

相關文章
相關標籤/搜索