學習Angular 2 , 《揭祕Angular 2》讀書筆記。
Angular2 選擇 TypeScript 做爲其官方最主要的構建語音,這意味着掌握 TypeScript 語音將更有利於高效地開發 Angular 應用。編程
在TypeScript中,提供了一下基本數據類型數組
布爾類型(boolean)安全
數據類型(number)函數
字符串類型(string)oop
數組類型(array)學習
元組類型(tuple)code
枚舉類型(enum)ip
任意值類型(any)開發
null 和 undefined字符串
void 類型
never 類型
其中元組、枚舉、任意值、void類型和 never類型是TypeScript有別與JavaScript的特有類型。
在TypeScript中聲明變量,須要加上類型聲明,例如boolean和string等。經過靜態類型約束,在編譯時執行類型檢查,能夠避免一些類型混用的低級錯誤。
布爾類型
布爾類型是最簡單的數據類型,只有true和false兩種值。也就是說若是賦值爲非boolean的其餘類型值,編譯時會拋出錯誤。
let flag: boolean = true; flag = 1; // 報錯
數據類型
在TyopeScript中,數字都是浮點型。TypeScript同時支持二進制、八進制、十進制和十六進制字面量,示例代碼以下:
let binaryLiteral: number = 0b1010; // 二進制 let octalLiteral: number = 0o744; // 八進制 let decLiteral: number = 6; // 十進制 let hexLiteral: number = 0xf00d; // 十六進制
字符串類型
TypeScript支持使用單引號(')或雙引號(")來表示字符串類型。還支持使用模板字符串反引號(`)來定義多行文本和內嵌表達式。使用${ expr }的形式嵌入變量或表達式,在處理拼接字符串的時候頗有用,示例以下:
let name: string = "Angular"; let years: number = 5; let words: string = `您好,今年是 ${ name } 發佈 ${ years + 1} 週年`;
數組類型
TypeScript數組的操做相似與JavaScript中數組的操做,TypeScript有兩種數組定義方式,示例代碼以下:
// 在元素類型後面加上[] let arr: number[] = [1, 2]; // 或者使用數組泛型 let arr: Array<number> = [1, 2];
元組類型
元組類型用來表示已知元素數量和類型的數組,各元素的類型沒必要相同。下面定義了一組值分別爲字符串和數字類型的元組,示例代碼以下:
let x: [string, number]; x = ['Angular', 25]; // 運行正常 x = [25, 'Angular']; // 報錯 console.log(x[0]); // 輸出 Angular
枚舉類型
枚舉是一個可被命名的整型常數的集合,枚舉類型爲集合成員賦予有意義的名稱,加強可讀性,示例代碼以下:
enum Color {Red, Green, Blue}; let c: Color = Color.Blue; console.log(c); // 輸出 2
枚舉默認下標是0,能夠手動修改默認下標值,示例代碼以下:
enum Color {Red = 2, Blue, Green = 6}; let c: Color = Color.Blue; console.log(c); // 輸出:3
任意值類型
任意值是 TypeScript 針對編程時類型不明確的變量使用的一種數據類型,它經常使用於一下三種狀況。
變量的值會動態改變時,好比來自用戶的輸入,任意值類型可讓這些變量跳過編譯階段的類型檢查,示例代碼以下:
let x: any = 1; // 數字類型 x = 'I am who I am'; // 字符串類型 x = false; // 布爾類型
改寫現有代碼時,任意值容許在編譯時可選擇地包含或移除類型檢查,示例代碼以下:
let x: any = 4; x.ifItExists(); // 正確,ifItExists方法在運行時可能存在,但這裏並不會檢查 x.toFixed(); // 正確
定義存儲各類類型數據的數組時,示例代碼以下:
let arrayList: any[] = [1, false, 'fine']; arrayList[1] = 100;
null 和 undefined
默認狀況下,null 和 undefined 是其它類型的子類型,能夠賦值給其它類型,如數字類型,此時,賦值後的類型會變成 null 或 undefined。而在TypeScript中啓用嚴格的空校驗(--strictNullChecks)特性,就可使得null 和 undefined 只能被賦值給 void 或自己對應的類型,示例代碼以下:
// 啓用 --strictNullChecks let x: number; x = 1; // 運行正確 x = undefined; // 運行錯誤 x = null; // 運行錯誤
上面的例子中變量 x 只能是數字類型。若是一個類型可能出行 null 或 undefined, 能夠用 | 來支持多種類型,示例代碼以下:
// 啓用 --strictNullChecks let x: number | null | undefined; x = 1; // 運行正確 x = undefined; // 運行正確 x = null; // 運行正確
void 類型
在 TypeScript 中,使用 void 表示沒有任何類型。 例如一個函數沒有返回值時,意味着返回值類型是 void,示例代碼以下:
function hello(): void { alert("Hello Angular"); }
對於可忽略返回值的回調函數來講,使用 void 類型會比任意值類型更安全一些,示例代碼以下:
function func(foo:() => void) { let f = foo(); // 使用函數 foo 的返回值 f.doSth(); // 報錯, void 類型不存在 doSth() 方法, 此時換成任意值類型都不回報錯 }
never 類型
never 是其它類型(包括 null 和 undefined)的子類型,表明從不會出現的值。這意味着聲明爲 never 類型的變量只能被 never 類型所賦值,在函數中它一般表現爲拋出異常或沒法執行到終止點(例如無線循環),示例代碼以下:
let x: never; let y: number; // 運行錯誤,數字類型不能轉爲 never 類型 x = 123; // 運行正確,never 類型能夠賦值給 never類型 x = (()=>{ throw new Error('exception')})(); // 運行正確,never 類型能夠賦值給 數字類型 y = (()=>{ throw new Error('exception')})(); // 返回值爲 never 的函數能夠是拋出異常的狀況 function error(message: string): never { throw new Error(message); } // 返回值爲 never 的函數能夠是沒法被執行到的終止點的狀況 function loop(): never { while (true) {} }