Что такое литеральные типы

Ответ

Литеральные типы в TypeScript позволяют указывать конкретные значения переменных или свойств. Они сужают тип до определённого значения, а не диапазона.

type Direction = 'left' | 'right' | 'up' | 'down';
let move: Direction = 'left'; // корректно
move = 'diagonal'; // ошибка, такого значения нет в типе

Используются для:

  • Ограничения возможных значений (например, статусы, направления)
  • Создания перечислений без enum
  • Уточнения возвращаемых значений функций

Особенности:

  • Могут быть строковыми, числовыми или булевыми
  • Часто комбинируются с union-типами
  • Позволяют TypeScript точнее проверять код

Ответ 18+ 🔞

Слушай, а вот эта ваша TypeScript-шная магия с литеральными типами — это ж просто песня, а не фича! Ну реально, как будто наконец-то дали в руки не тупой молоток, а хирургический скальпель, блядь.

Вот смотри, раньше ты объявлял переменную direction как строку, и туда мог вписать что угодно: 'left', 'right', а хоть бы и 'нахуй'. А компилятор тебе: "Да похуй, чувак, строка же, всё ок". И потом в рантайме — пиздец, ошибка, потому что твоя функция 'нахуй' не понимает.

А теперь делаешь так:

type Direction = 'left' | 'right' | 'up' | 'down';
let move: Direction = 'left'; // Всё чётко, епта
move = 'diagonal'; // А вот тут тебе сразу, в рот меня чих-пых, подсветка красным: "Не-не-не, дружок, 'diagonal' — это не в нашей конституции прописано!"

Вообще, удивление пиздец, насколько это удобно. Используется эта хуйня, например:

  • Чтобы ограничить возможные значения, как в том примере с направлением. Не просто строка, а строка из конкретного списка. Типа статусы заказа: 'new', 'processing', 'delivered', 'lost-in-transit-ёпта'.
  • Чтобы создавать перечисления без этого громоздкого enum, который иногда ведёт себя как манда с ушами.
  • Чтобы функции возвращали не абы что, а конкретные, предсказуемые значения. Сказали, что функция вернёт 'success' или 'error' — значит, вернёт именно это, а не 'ойвсёпропало'.

Особенности, которые надо запомнить, чтобы не облажаться:

  • Литералы могут быть не только строковыми, но и числовыми или даже булевыми. let isActive: true = true; — и попробуй запихни туда false, получишь по ебалу от компилятора.
  • Они часто идут в связке с union-типами (это вот эта палочка |). Это и есть их основная сила, блядь.
  • Главная фишка — они сужают тип. TypeScript благодаря этому начинает проверять твой код так пристально, что аж волосы дыбом. Чуть ошибешься — сразу кричит: "Э, сабака, сука, э, бошка думай!".

Короче, инструмент овердохуище полезный. Сначала кажется, что мелочь, а потом без него как без рук.