TGViewer
Frontend Alliance | Автушенко Андрей Frontend Alliance | Автушенко Андрей @frontendalliance · 2.22K subscribers
Post #115 1.44K
Специальные типы: unknown, never, any и void

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

🟣Unknown - это множество всех возможных типов. В него можно присвоить что угодно - любое значение будет корректно относиться к типу unknown.
Это максимально широкий тип в системе типов TypeScript.

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

Использовать unknown следует в ситуациях, когда мы не знаем тип данных в данный момент времени.
Например, после парсинга значения из localStorage.

🟣Его полная противоположность - тип never.

Тип never представляет пустое множество: не существует ни одного значения, которое соответствовало бы этому типу.

type Union = number & string // never


Например, если мы попытаемся сделать пересечение строк и чисел, мы получим never, потому что эти два множества никак не пересекаются.

При использовании конструкции switch-case по типам - в дефолтной ветке результатом тоже будет never.

type Input = boolean | number

function handleInput(x: Input): boolean | number {
if (typeof x === 'boolean') {
return !x; // инвертируем boolean
} else if (typeof x === 'number') {
return x * 2; // удваиваем число
} else {
const unreachable = x; // exhausted check
return 0;
}
}


Рассмотрим пример, у нас есть функция handleInput, которая принимает x, который может быть буленовым или числом. Внутри первого if'a мы сузили эти значения через проверку на typeof только до значений false и true, внутри второго if'a мы сузили до множества чисел, а вот в последнем else блоке уже будет never, что говорит о том, что мы сузили со всех возможных вариантов до пустого множества.

И это может быть очень полезно, так как при масштабирование кода, мы сразу получим ошибку, если кто-то добавит новое значение в тип, которые мы используем в условиях. Это так же работает и с конструкцией switch-case (скрин 1).

🟣Any - это специальный тип в TypeScript.
С точки зрения системы типов, any находится везде одновременно.

Например, если проверить через тернарный оператор, расширяет ли any never, результат будет неожиданным - мы получим пересечение, хотя ожидалось, что будет одно конкретное значение (скрин 2).
Это происходит потому, что any ведёт себя иначе, чем обычные типы: он раскладывает варианты для всех подтипов и может вернуть оба результата.
Any одновременно является подтипом любого типа и супертипом любого типа, поэтому его поведение максимально «размытое».

const a: any = 5

Мы не объявляем здесь, что тут переменная типа any, мы намеренно выключаем проверку типов.

При этом ключевое слово any «вирусное» - все дальнейшие операции с этой переменной тоже будут восприниматься как any: проверки отключаются, и результат вновь становится типа any.

Поэтому это опасный тип, который не стоит использовать в разработке. Это сводит пользу тайпскрипта на нет.

🟣 Void - это тип, который состоит из одного значения: undefined.

Он используется для обозначения того, что функция не возвращает никакого значения.
Даже если TypeScript может сам вывести тип функции как void, рекомендуется указывать его явно.

Это защитит код на случай, если кто-то при рефакторинге случайно попробует вернуть из функции другое значение - TypeScript сразу выдаст ошибку (скрин 3).

✈️ Telegram | 🎓 Менторство | 📹 YouTube | 👩‍💻 Roadmap
  • 🔥 20
  • ✍ 6
  • 👍 6
More from @frontendalliance
  1. Sep 19, 2026Скам на рынке труда Скам в интернете уже давно не удивляет. Но сегодняшний скам паразитиру…
  2. Sep 15, 2026Post #141
  3. Sep 10, 2026Post #140
  4. Aug 21, 2026Post #139
  5. Aug 6, 2026Type refinements: все способы уточнить тип Type Refinement (или уточнение типа) - это проц…
  6. Jun 30, 2026WeakMap и WeakSet На защитах материала у студентов по JavaScript я регулярно вижу один и т…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →