TypeScript - Символы: Пособие для начинающих
Здравствуйте, будущий супергерой кодирования! Сегодня мы отправимся в увлекательное путешествие в мир символов TypeScript. Не волнуйтесь, если вы никогда не программировали раньше - я буду вашим доброжелательным проводником, и мы шаг за шагом исследуем эту тему. Так что возьмите кружку вашего любимого напитка и погружайтесь с нами!
Что такое символы?
Прежде чем мы перейдем к деталям, давайте поймем, что такое символы. Представьте, что у вас есть сундук с сокровищами, и вам нужна уникальная ключ для него. В 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