
- TypeScript 基礎
- TypeScript - 首頁
- TypeScript - 路線圖
- TypeScript - 概述
- TypeScript - 環境設定
- TypeScript - 基本語法
- TypeScript vs. JavaScript
- TypeScript - 特性
- TypeScript - 變數
- TypeScript - let & const
- TypeScript - 運算子
- TypeScript 基本型別
- TypeScript - 型別
- TypeScript - 型別註解
- TypeScript - 型別推斷
- TypeScript - 數字
- TypeScript - 字串
- TypeScript - 布林值
- TypeScript - 陣列
- TypeScript - 元組
- TypeScript - 列舉
- TypeScript - Any
- TypeScript - Never
- TypeScript - 聯合型別
- TypeScript - 字面量型別
- TypeScript - 符號
- TypeScript - null vs. undefined
- TypeScript - 類型別名
- TypeScript 控制流
- TypeScript - 決策
- TypeScript - if 語句
- TypeScript - if else 語句
- TypeScript - 巢狀 if 語句
- TypeScript - switch 語句
- TypeScript - 迴圈
- TypeScript - for 迴圈
- TypeScript - while 迴圈
- TypeScript - do while 迴圈
- TypeScript 函式
- TypeScript - 函式
- TypeScript - 函式型別
- TypeScript - 可選引數
- TypeScript - 預設引數
- TypeScript - 匿名函式
- TypeScript - 函式構造器
- TypeScript - rest 引數
- TypeScript - 引數解構
- TypeScript - 箭頭函式
- TypeScript 介面
- TypeScript - 介面
- TypeScript - 擴充套件介面
- TypeScript 類和物件
- TypeScript - 類
- TypeScript - 物件
- TypeScript - 訪問修飾符
- TypeScript - 只讀屬性
- TypeScript - 繼承
- TypeScript - 靜態方法和屬性
- TypeScript - 抽象類
- TypeScript - 訪問器
- TypeScript - 鴨子型別
- TypeScript 高階型別
- TypeScript - 交叉型別
- TypeScript - 型別守衛
- TypeScript - 型別斷言
- TypeScript 型別操作
- TypeScript - 從型別建立型別
- TypeScript - Keyof 型別運算子
- TypeScript - Typeof 型別運算子
- TypeScript - 索引訪問型別
- TypeScript - 條件型別
- TypeScript - 對映型別
- TypeScript - 模板字面量型別
- TypeScript 泛型
- TypeScript - 泛型
- TypeScript - 泛型約束
- TypeScript - 泛型介面
- TypeScript - 泛型類
- TypeScript 其他
- TypeScript - 三斜槓指令
- TypeScript - 名稱空間
- TypeScript - 模組
- TypeScript - 環境宣告
- TypeScript - 裝飾器
- TypeScript - 型別相容性
- TypeScript - Date 物件
- TypeScript - 迭代器和生成器
- TypeScript - Mixins
- TypeScript - 實用程式型別
- TypeScript - 裝箱和拆箱
- TypeScript - tsconfig.json
- 從 JavaScript 到 TypeScript
- TypeScript 有用資源
- TypeScript - 快速指南
- TypeScript - 有用資源
- TypeScript - 討論
TypeScript - 符號
在 TypeScript 中,符號是一種原始資料型別,它是唯一且不可變的。符號是在 ECMAScript 2015(也稱為 ES6)中引入的。
就像我們使用數字、字串或布林值來建立不同資料型別的變數一樣,我們可以使用符號型別來建立符號。
使用符號型別有很多好處,因為它提供了比其他資料型別更多的功能。在本教程中,我們將學習符號的基礎知識及其不同用途。
語法
TypeScript 中的符號是使用 Symbol() 建構函式建立的 -
let test_symbol = Symbol();
您可以將鍵作為符號引數傳遞以識別符號號。
let key_symbol = Symbol("key-for-symbol");
符號是唯一且不可變的
在 TypeScript 中,您可以建立多個唯一的符號。即使您使用相同的鍵建立符號,它們也將是唯一的。
讓我們建立兩個具有相同鍵的不同符號。
let first_sym = Symbol("sym"); let second_sym = Symbol("sym"); console.log(first_sym === second_sym);
以上 TypeScript 程式碼顯示了這兩個符號是唯一的並且不可比較的。
編譯後,它將在 JavaScript 中生成相同的程式碼。
輸出如下 -
false
符號作為物件屬性的鍵
符號也可以像字串一樣用作物件屬性的鍵。
在下面的示例中,我們建立了符號並定義了物件。我們使用 obj_symbol 作為物件的屬性。此外,我們可以像訪問物件的普通屬性一樣訪問它。
const obj_symbol = Symbol(); // creating the object let object = { // using the obj_symbol as key of object [obj_symbol]: "obj value", }; // accessing the symbol property of the object console.log( "The value of the obj_symbol property in the object is " + object[obj_symbol] );
編譯後,它將在 JavaScript 中生成相同的程式碼。
它將產生以下輸出 -
The value of the obj_symbol property in the object is obj value
帶 switch case 語句的符號
由於每個符號都是唯一的,因此我們可以將其用作 switch-case 語句的 case。當我們使用符號與 switch case 語句時,它確保每個 case 都是唯一的。如果任何 case 與作為 switch 語句引數傳遞的 case 不匹配,則它將轉到 default case。
switch(symbol) { case symbol1: break case symbol2: break; }
在上面的語法中,符號作為 switch 語句的引數傳遞。之後,我們使用符號名稱後跟 case 關鍵字來建立不同的 case。
示例
在下面的示例中,我們建立了四個不同的符號。之後,我們定義了 print_symbol 函式,其中包含 switch case 語句來處理不同的 case。
在 switch case 語句中,我們使用符號值作為 case 並執行特定 case 的程式碼。
// different symbols const symbol1 = Symbol(); const symbol2 = Symbol(); const symbol3 = Symbol(); const symbol4 = Symbol(); function print_symbol(symbol) { // creating the switch case statement switch (symbol) { // different cases case symbol1: console.log("The case is symbol 1."); break; case symbol2: console.log("The case is symbol 2."); break; case symbol3: console.log("The case is symbol 3."); debugger; break; case symbol4: console.log("The case is symbol 4."); break; default: console.log("The case is default."); } } // calling the function print_symbol(symbol2); print_symbol(symbol4);
編譯後,它將在 JavaScript 中生成相同的程式碼。
它將產生以下輸出 -
The case is symbol 2. The case is symbol 4.
唯一符號
在 TypeScript 中,Symbol 是一種原始資料型別。因此,我們只需要將其用作型別,但我們也可以使用“唯一符號”將其用作字面量。符號包含唯一符號,這意味著唯一符號是符號的子型別。
我們只能將唯一符號與 const 變數和只讀屬性一起使用。如果我們想將特定符號型別引用到另一個變數,我們可以使用“typeof”運算子。
語法
您可以按照以下語法使用符號作為使用唯一符號的字面量。
const test_symbol: unique symbol = Symbol(); let symbol1: typeof test_symbol = test_symbol; class C { static readonly symb: unique symbol = Symbol("unique symbol"); }
示例
在下面的示例中,我們聲明瞭型別為 symbol 的 test_symbol,並使用 unique symbol 關鍵字將符號用作型別字面量。此外,使用者可以觀察我們如何使用 typeof 運算子將符號用作使用 let 和 var 關鍵字宣告的變數的型別字面量。
此外,我們使用了 unique symbol 關鍵字來定義只讀靜態類的成員的型別。
// here, we used the unique symbol to define the type of the sym1. const test_symbol: unique symbol = Symbol(); // we can't reference the unique symbol to the let type of variable // let sym2: unique symbol = Symbol(); // to reference the symbol type to the variables declared with the let keyword, using the typeof operator. let symbol1: typeof test_symbol = test_symbol; console.log("The value of symbol1 is " + typeof test_symbol); // referencing the unique symbol to the static class property class C { static readonly symb: unique symbol = Symbol("unique symbol"); }
編譯後,它將生成以下 JavaScript 程式碼 -
// here, we used the unique symbol to define the type of the sym1. var test_symbol = Symbol(); // we can't reference the unique symbol to the let type of variable // let sym2: unique symbol = Symbol(); // to reference the symbol type to the variables declared with the let keyword, using the typeof operator. var symbol1 = test_symbol; console.log("The value of symbol1 is " + typeof test_symbol); // referencing the unique symbol to the static class property var C = /** @class */ (function () { function C() { } C.symb = Symbol("unique symbol"); return C; }());
以上程式碼將產生以下輸出 -
The value of symbol1 is symbol