TypeScript - 型別



型別系統表示語言支援的不同值型別。型別系統會在程式儲存或操作值之前檢查值的有效性。這確保了程式碼按預期執行。型別系統還可以提供更豐富的程式碼提示和自動文件。

TypeScript 提供資料型別作為其可選型別系統的一部分。資料型別的分類如下所示:

Data Types

any 型別

any 資料型別是 TypeScript 中所有型別的超型別。它表示動態型別。使用 any 型別等同於選擇不為變數進行型別檢查。

內建型別

下表列出了 TypeScript 中所有內建型別:

資料型別 關鍵字 描述
數字 number 雙精度 64 位浮點數。它可以用來表示整數和小數。
字串 string 表示 Unicode 字元序列
布林值 boolean 表示邏輯值,true 和 false
空值 void 用於函式返回型別,表示不返回函式值的函式
null 表示物件值的故意缺失。
未定義 undefined 表示賦予所有未初始化變數的值
Symbol symbol ES2015 中引入的唯一且不可變的基元。
物件 object 表示使用者定義類的例項、陣列、函式等。
永不存在 never 表示永遠不會出現的值。
TypeScript 和 JavaScript 中沒有整數型別。

現在,讓我們詳細瞭解每種內建資料型別。

數字

在 TypeScript 中,number 資料型別可以儲存整數、浮點數、二進位制數、十進位制數、十六進位制數等。但是,所有整數在 TypeScript 中都表示為浮點數。

示例

在下面的程式碼中,agemarks 兩個變數都是 number 型別。age 變數包含整數,marks 變數包含浮點數。

// Integer number
let age: number = 30;
// Float number
let marks: number = 30.5;

字串

string 資料型別用於儲存文字值。

您可以透過三種方式定義字串

  • 使用單引號

  • 使用雙引號

  • 使用反引號

反引號用於建立多行字串或模板字串。

示例

在下面的程式碼中,first_name 字串使用單引號建立,last_name 字串使用雙引號建立。full_name 字串使用反引號建立,它使用模板字面量建立字串。

let first_name: string = 'John';
let last_name: string = "Doe";
let full_name: string = `${first_name} ${last_name}`;

布林值

在 TypeScript 中,布林資料型別允許您表示邏輯實體。它儲存 truefalse 值。布林變數主要用於 if-else 或 switch 等條件語句,根據某些邏輯值執行流程。

示例

在下面的程式碼中,isReady 是布林型別的變數,它包含 true 值。

let isReady: boolean = true;

Symbol

symbol 是一種基元資料型別,主要用於建立唯一值。它允許開發者建立不會與任何其他鍵衝突的唯一物件鍵。

示例

在這裡,我們使用了 Symbol() 建構函式,它返回新的唯一鍵。我們使用 UNIQUE_KEY 作為 obj 物件的鍵。

// Define a symbol
const UNIQUE_KEY = Symbol(); 
// Use the symbol as a property key in an object
let obj = {
[UNIQUE_KEY]: "SecretValue"
};

TypeScript 中的 null 型別表示物件值的故意缺失。它是基元型別之一,通常用於指示變數故意不指向任何物件。

示例

在下面的程式碼中,empty 變數包含 null 值。

let empty: null = null;

未定義

undefined 資料型別表示值的缺失。當宣告變數但未初始化時,它包含 undefined 值。

示例

在下面的程式碼中,undef 變數包含 undefined 值。

let undef: undefined;

Null 和 undefined ——它們一樣嗎?

nullundefined 資料型別常常令人困惑。null 和 undefined 不能用於引用變數的資料型別。它們只能作為值賦給變數。

但是,null 和 undefined 不相同。用 undefined 初始化的變量表示該變數沒有值或物件分配給它,而 null 表示該變數已設定為值為 undefined 的物件。

物件

object 是一種非基元資料型別,可以包含任何不是數字、字串、布林值、symbol、null 或 undefined 的值。您可以使用物件字面量或 Object() 建構函式建立物件。

示例

在下面的程式碼中,我們使用物件字面量建立了物件。person 變數的型別是一個物件。我們在花括號(物件字面量)之間添加了鍵值對。

let person: object = {name: "Bob"};

空值

void 型別用於不返回值的函式的返回型別。它表示根本沒有型別。

示例

在這裡,我們使用 void 資料型別與函式一起使用,以便函式不返回值。

function log(): void {
console.log("log");
}

使用者定義型別

使用者定義型別包括列舉 (enum)、類、介面、陣列和元組。這些將在後面的章節中詳細討論。

陣列

陣列資料型別是相同元素的集合。它儲存元素,您可以使用從 0 開始的陣列索引訪問或更新這些元素。

任何資料型別的陣列可以定義為 data_type[]Array<data_type>,其中 <data_type> 可以是任何基元或非基元資料型別。

示例

在下面的程式碼中,我們定義了一個只包含 3 個元素的數字陣列。1 的索引是 0,2 的索引是 1,3 的索引是 2。

let numbers: number[] = [1, 2, 3];

元組

元組型別允許您表達一個具有固定數量元素的陣列,這些元素的型別是已知的,但不一定是相同的。在處理需要具有特定結構的陣列時,這增加了一層安全性。

示例

在下面的程式碼中,tuple 變數可以具有長度為 2 的陣列作為值。元組的第一個元素是字串型別,第二個元素是數字型別。

let tuple: [string, number] = ["hello", 10];
console.log(tuple); // Output: ["hello", 10]

列舉

列舉是相關值的集合,可以是數字值或字串值。enum 使得以更易讀的方式處理相關常量集變得更容易。

示例

在下面的程式碼中,Color 列舉包含不同的顏色。我們可以使用列舉名 Color 後跟一個點和顏色名稱值來訪問顏色。

enum Color {Red, Green, Blue}
let c: Color = Color.Green;
console.log(c); // Output: 1
廣告