TypeScript - Символы: Пособие для начинающих

Здравствуйте, будущий супергерой кодирования! Сегодня мы отправимся в увлекательное путешествие в мир символов TypeScript. Не волнуйтесь, если вы никогда не программировали раньше - я буду вашим доброжелательным проводником, и мы шаг за шагом исследуем эту тему. Так что возьмите кружку вашего любимого напитка и погружайтесь с нами!

TypeScript - Symbols

Что такое символы?

Прежде чем мы перейдем к деталям, давайте поймем, что такое символы. Представьте, что у вас есть сундук с сокровищами, и вам нужна уникальная ключ для него. В TypeScript символы resemble эти уникальные ключи - это особые, неповторимые идентификаторы, которые вы можете использовать в своем коде.

Синтаксис: Как создать символы

Создание символа так же просто, как сделать бутерброд ( может быть, даже проще!). Вот как это делается:

let mySymbol = Symbol();

Готово! Вы только что создали свой первый символ. Но подождите, есть больше! Вы также можете дать своему символу описание:

let namedSymbol = Symbol("Это мой особенный символ");

Представьте это описание как бирку для вашего символа. Оно не влияет на уникальность символа, но может помочь вам идентифицировать его позже.

Маленькое упражнение

Давайте создадим два символа и сравним их:

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

console.log(symbol1 === symbol2); // Вывод: false

Даже несмотря на то, что оба символа были созданы без описания, они по-прежнему уникальны. Это как близнецы - они могут выглядеть одинаково, но они разные личности!

Символы уникальны и неизменны

Теперь давайте поговорим о двух больших словах: уникальность и неизменность.

Уникальность

Каждый созданный вами символ уникален, как снежинка. Даже если вы создадите два символа с одним и тем же описанием, они по-прежнему будут разными:

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

console.log(sym1 === sym2); // Вывод: false

Неизменность

Once вы создали символ, вы не можете его изменить. Это как высечь что-то на камне - оно останется навсегда.

let immutableSymbol = Symbol("Я не могу измениться");
// Нет способа изменить immutableSymbol!

Символы в качестве ключей для свойств объекта

Одна из coolest вещей о символах заключается в том, что вы можете использовать их в качестве ключей для свойств объекта. Это как иметь тайник в вашем сундуке с сокровищами, о котором знает только вы!

let specialKey = Symbol("secretCompartment");

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

console.log(treasureChest[specialKey]); // Вывод: "Hidden treasure!"
console.log(treasureChest.gold); // Вывод: 100

В этом примере specialKey - это символ, который мы используем для доступа к секретному свойству нашего объекта treasureChest. Обычные ключи, такие как gold, работают как обычно, но наш символический ключ добавляет дополнительный уровень уникальности.

Символы с оператором switch

Символы также можно использовать в операторах switch. Это как иметь особый замок, который открывается только для определенных ключей:

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");
}

Remember, даже несмотря на то, что у нас Symbol("action") в первом случае, это не то же самое, что и наш actionSymbol. Каждый символ уникален!

Уникальные символы

TypeScript также имеет концепцию "уникальных символов". Это еще более особенные символы - это символы, которые TypeScript обрабатывает как имеющие completely уникальный тип:

const uniqueSymbol: unique symbol = Symbol("Я уникален!");

// Это работает:
let symVar1: typeof uniqueSymbol = uniqueSymbol;

// Это не работает:
// let symVar2: unique symbol = Symbol("Я также уникален!");
// Ошибка: Переменная, тип которой является "unique symbol", должна быть "const".

Уникальные символы должны быть声明ены с использованием const, и их нельзя recreate. Они как limit edition collectibles - как только они исчезнут, их больше не будет!

Методы работы с символами

Давайте рассмотрим некоторые полезные методы для работы с символами:

Method Description Example
Symbol.for() Создает символ в глобальном реестре символов let globalSym = Symbol.for("myGlobalSymbol");
Symbol.keyFor() Возвращает ключ символа в глобальном реестре символов let key = Symbol.keyFor(globalSym);
Object.getOwnPropertySymbols() Возвращает массив всех символьных свойств, найденных в данном объекте let symbols = Object.getOwnPropertySymbols(myObject);

Вот быстрый пример того, как использовать эти методы:

let globalSym = Symbol.for("myGlobalSymbol");
console.log(Symbol.keyFor(globalSym)); // Вывод: "myGlobalSymbol"

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

console.log(Object.getOwnPropertySymbols(obj).length); // Вывод: 2

И вот вы только что完成了 свой express-курс по символам TypeScript. Помните, что практика делает perfect, так что не бойтесь экспериментировать с этими концепциями в своем собственном коде. Кто знает? Вы можете просто解锁 некоторые superpowers кодирования на пути!

Счастливого кодирования, будущий маг TypeScript! ?‍♂️✨

Credits: Image by storyset