TypeScript - Kí hiệu: Hướng dẫn cho người mới bắt đầu

Xin chào bạn, ngôi sao lập trình tương lai! Hôm nay, chúng ta sẽ bắt đầu một chuyến hành trình thú vị vào thế giới của TypeScript Symbols. Đừng lo lắng nếu bạn chưa từng lập trình trước đây - tôi sẽ là người hướng dẫn thân thiện của bạn, và chúng ta sẽ khám phá chủ đề này từng bước một. Vậy, hãy lấy một ly đồ uống yêu thích của bạn, và我们一起潜水吧!

TypeScript - Symbols

什么是 Symbols?

Trước khi chúng ta đi vào chi tiết, hãy hiểu Symbols là gì. Hãy tưởng tượng bạn có một két bảo vệ, và bạn cần một chìa khóa duy nhất cho nó. Trong TypeScript, Symbols giống như những chìa khóa duy nhất đó - chúng là những идентификатор đặc biệt, một lần duy nhất mà bạn có thể sử dụng trong mã của mình.

Cú pháp: Làm thế nào để tạo Symbols

Tạo một Symbol dễ dàng như làm một sandwich (cũng có thể dễ hơn!). Dưới đây là cách bạn làm:

let mySymbol = Symbol();

Đó là tất cả! Bạn vừa tạo ra Symbol đầu tiên của mình. Nhưng đợi đã, còn nhiều hơn nữa! Bạn cũng có thể đặt mô tả cho Symbol của mình:

let namedSymbol = Symbol("This is my special symbol");

Hãy nghĩ về mô tả này như một thẻ tên cho Symbol của bạn. Nó không ảnh hưởng đến tính duy nhất của Symbol, nhưng nó có thể giúp bạn nhận dạng nó sau này.

Một bài tập nhỏ

Hãy tạo hai Symbols và so sánh chúng:

let symbol1 = Symbol();
let symbol2 = Symbol();

console.log(symbol1 === symbol2); // Output: false

Dù cả hai symbols được tạo ra mà không có mô tả, chúng vẫn duy nhất. Điều này giống như anh em sinh đôi - họ có thể trông alike, nhưng họ là những cá thể khác nhau!

Symbols là duy nhất và không thay đổi

Bây giờ, hãy nói về hai từ lớn: duy nhất và không thay đổi.

Duy nhất

Mỗi Symbol bạn tạo ra là một lần duy nhất, giống như mộtflake tuyết. Ngay cả khi bạn tạo hai Symbols với cùng một mô tả, chúng vẫn khác nhau:

let sym1 = Symbol("mySymbol");
let sym2 = Symbol("mySymbol");

console.log(sym1 === sym2); // Output: false

Không thay đổi

Một khi bạn tạo ra một Symbol, bạn không thể thay đổi nó. Điều này giống như khắc điều gì đó vào đá - nó sẽ ở đó mãi mãi.

let immutableSymbol = Symbol("I can't change");
// Không có cách nào để thay đổi immutableSymbol!

Symbols như là khóa cho thuộc tính của đối tượng

Một trong những điều tuyệt vời nhất về Symbols là bạn có thể sử dụng chúng như là khóa cho thuộc tính của đối tượng. Điều này giống như có một ngăn bí mật trong két của bạn mà chỉ bạn biết!

let specialKey = Symbol("secretCompartment");

let treasureChest = {
[specialKey]: "Hidden treasure!",
gold: 100,
silver: 200
};

console.log(treasureChest[specialKey]); // Output: "Hidden treasure!"
console.log(treasureChest.gold); // Output: 100

Trong ví dụ này, specialKey là một Symbol mà chúng ta sử dụng để truy cập một thuộc tính bí mật của đối tượng treasureChest. Các khóa thông thường như gold hoạt động như bình thường, nhưng khóa Symbol của chúng ta thêm một lớp duy nhất.

Symbol với câu lệnh switch

Symbols cũng có thể được sử dụng trong các câu lệnh switch. Điều này giống như có một ổ khóa đặc biệt chỉ mở cho các khóa cụ thể:

let actionSymbol = Symbol("action");

switch (actionSymbol) {
case Symbol("action"):
console.log("This won't be logged");
break;
case actionSymbol:
console.log("This will be logged");
break;
default:
console.log("Default case");
}

Nhớ rằng, mặc dù chúng ta có Symbol("action") trong trường hợp đầu tiên, nó không phải là cùng một Symbol với actionSymbol. Mỗi Symbol là duy nhất!

Symbols duy nhất

TypeScript cũng có khái niệm gọi là "unique symbols". Đây là những Symbols đặc biệt hơn - chúng là Symbols mà TypeScript coi như có một loại duy nhất hoàn toàn:

const uniqueSymbol: unique symbol = Symbol("I'm unique!");

// Điều này hoạt động:
let symVar1: typeof uniqueSymbol = uniqueSymbol;

// Điều này không hoạt động:
// let symVar2: unique symbol = Symbol("I'm also unique!");
// Lỗi: A variable whose type is a 'unique symbol' type must be 'const'.

Unique symbols phải được khai báo với const, và chúng không thể được tạo lại. Chúng giống như những món đồ collectible限量版 - một khi chúng biến mất, chúng sẽ không quay lại!

Các phương thức để làm việc với Symbols

Hãy nhìn vào một số phương thức hữu ích để làm việc với Symbols:

Phương thức Mô tả Ví dụ
Symbol.for() Tạo một Symbol trong sổ đăng ký Symbol toàn cục let globalSym = Symbol.for("myGlobalSymbol");
Symbol.keyFor() Truy xuất khóa của một Symbol trong sổ đăng ký Symbol toàn cục let key = Symbol.keyFor(globalSym);
Object.getOwnPropertySymbols() Trả về một mảng các Symbol thuộc tính được tìm thấy trong một đối tượng cho trước let symbols = Object.getOwnPropertySymbols(myObject);

Dưới đây là một ví dụ nhanh về cách sử dụng các phương thức này:

let globalSym = Symbol.for("myGlobalSymbol");
console.log(Symbol.keyFor(globalSym)); // Output: "myGlobalSymbol"

let obj = {
[Symbol("key1")]: "value1",
[Symbol("key2")]: "value2"
};

console.log(Object.getOwnPropertySymbols(obj).length); // Output: 2

Và thế là xong! Bạn vừa hoàn thành khóa học nhanh về TypeScript Symbols. Nhớ rằng, thực hành là chìa khóa để thành thạo, vì vậy đừng ngần ngại thử nghiệm các khái niệm này trong mã của bạn. Ai biết được? Bạn có thể mở khóa một số siêu năng lực lập trình trên đường đi!

Chúc bạn lập trình vui vẻ, phù thủy TypeScript tương lai! ?‍♂️✨

Credits: Image by storyset