TypeScript 基礎型別

TypeScript 包含的資料型別如下表:

資料型別 關鍵字 描述
任意型別 any 宣告為 any 的變數可以賦予任意型別的值。
數字型別 number

雙精度 64 位浮點值。它可以用來表示整數和分數。

let binaryLiteral: number = 0b1010; // 二進位制
let octalLiteral: number = 0o744;    // 八進位制
let decLiteral: number = 6;    // 十進位制
let hexLiteral: number = 0xf00d;    // 十六進位制
字串型別 string

一個字元系列,使用單引號(')或雙引號(")來表示字串型別。反引號(`)來定義多行文字和內嵌表示式。

let name: string = "itread01";
let years: number = 5;
let words: string = `您好,今年是 ${ name } 釋出 ${ years + 1} 週年`;
布林型別 boolean

表示邏輯值:true 和 false。

let flag: boolean = true;
陣列型別

宣告變數為陣列。

// 在元素型別後面加上[]
let arr: number[] = [1, 2];

// 或者使用陣列泛型
let arr: Array<number> = [1, 2];
元組

元組型別用來表示已知元素數量和型別的陣列,各元素的型別不必相同,對應位置的型別需要相同。

let x: [string, number];
x = ['itread01', 1];    // 執行正常
x = [1, 'itread01'];    // 報錯
console.log(x[0]);    // 輸出 itread01
列舉 enum

列舉型別用於定義數值集合。

enum Color {Red, Green, Blue};
let c: Color = Color.Blue;
console.log(c);    // 輸出 2
void void

用於標識方法返回值的型別,表示該方法沒有返回值。

function hello(): void {
    alert("Hello itread01");
}
null null

表示物件值缺失。

undefined undefined

用於初始化變數為一個未定義的值

never never

never 是其它型別(包括 null 和 undefined)的子型別,代表從不會出現的值。

注意:TypeScript 和 JavaScript 沒有整數型別。


Any 型別

任意值是 TypeScript 針對程式設計時型別不明確的變數使用的一種資料型別,它常用於以下三種情況。

1、變數的值會動態改變時,比如來自使用者的輸入,任意值型別可以讓這些變數跳過編譯階段的型別檢查,示例程式碼如下:

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

在 JavaScript 中 null 表示 "什麼都沒有"。

null是一個只有一個值的特殊型別。表示一個空物件引用。

用 typeof 檢測 null 返回是 object。

undefined

在 JavaScript 中, undefined 是一個沒有設定值的變數。

typeof 一個沒有值的變數會返回 undefined。

Null 和 Undefined 是其他任何型別(包括 void)的子型別,可以賦值給其它型別,如數字型別,此時,賦值後的型別會變成 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;    // 執行正確

更多內容可以檢視:JavaScript typeof, null, 和 undefined


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) {}
}

參考文章:https://segmentfault.com/a/1190000008893626