← Назад ко всем вопросам

Какая иерархия типов в TypeScript

1️⃣ Как кратко ответить

TypeScript имеет иерархию типов, где все типы наследуются от типа unknown, который является супертайпом для всех типов. Внизу иерархии находится тип never, который является субтайпом всех типов. Основные категории включают примитивные типы, объектные типы и специальные типы, такие как any, unknown, never и void.

2️⃣ Подробное объяснение темы

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

Основные категории типов

  1. Примитивные типы: Это базовые типы, которые включают:

    • string: для строковых значений.
    • number: для числовых значений.
    • boolean: для логических значений.
    • symbol: для уникальных идентификаторов.
    • bigint: для больших целых чисел.
    • null и undefined: представляют отсутствие значения.
  2. Объектные типы: Это более сложные структуры данных, такие как:

    • Объекты ({}).
    • Массивы (Array<T>).
    • Функции ((args: ArgsType) => ReturnType).
    • Интерфейсы и классы.
  3. Специальные типы:

    • any: отключает проверку типов, позволяя использовать значение любого типа.
    • unknown: супертайп для всех типов, но требует проверки типа перед использованием.
    • never: субтайп для всех типов, используется для функций, которые никогда не возвращают значение.
    • void: используется для функций, которые не возвращают значение.

Иерархия типов

  • unknown: На вершине иерархии. Это супертайп для всех типов, но требует проверки типа перед использованием, что делает его более безопасным, чем any.

  • Примитивные и объектные типы: Находятся между unknown и never. Они включают все стандартные типы, такие как string, number, boolean, а также пользовательские типы, такие как интерфейсы и классы.

  • any: Особый тип, который может принимать любое значение. Он не требует проверки типов, что делает его менее безопасным, чем unknown.

  • never: Находится внизу иерархии. Это субтайп для всех типов и используется для обозначения значений, которые никогда не встречаются. Например, функция, которая всегда выбрасывает исключение или бесконечно выполняется, будет иметь тип never.

Пример кода

function processValue(value: unknown): void {
  // Проверка типа перед использованием значения
  if (typeof value === "string") {
    console.log("String value:", value);
  } else if (typeof value === "number") {
    console.log("Number value:", value);
  } else {
    console.log("Unknown type");
  }
}
​
function throwError(message: string): never {
  throw new Error(message);
}
  • function processValue(value: unknown): void: Функция принимает параметр типа unknown. Это означает, что value может быть любого типа, но перед использованием необходимо проверить его тип.
  • if (typeof value === "string"): Проверка, является ли value строкой. Если да, то выводится строковое значение.
  • else if (typeof value === "number"): Проверка, является ли value числом. Если да, то выводится числовое значение.
  • else: Если value не строка и не число, выводится сообщение о неизвестном типе.
  • function throwError(message: string): never: Функция, которая всегда выбрасывает исключение, поэтому она имеет тип never, так как никогда не возвращает значение.

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

Тема: TypeScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки