TypeScript入門-基本類型

學習Angular 2 , 《揭祕Angular 2》讀書筆記。
Angular2 選擇 TypeScript 做爲其官方最主要的構建語音,這意味着掌握 TypeScript 語音將更有利於高效地開發 Angular 應用。編程

TypeScript 基本類型

在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) {}
}
相關文章
相關標籤/搜索