Какая иерархия типов в TypeScript
1️⃣ Как кратко ответить
TypeScript имеет иерархию типов, где все типы наследуются от типа unknown, который является супертайпом для всех типов. Внизу иерархии находится тип never, который является субтайпом всех типов. Основные категории включают примитивные типы, объектные типы и специальные типы, такие как any, unknown, never и void.
2️⃣ Подробное объяснение темы
TypeScript — это строго типизированный язык, который расширяет возможности JavaScript, добавляя статическую типизацию. Понимание иерархии типов в TypeScript важно для эффективного использования языка и предотвращения ошибок.
Основные категории типов
-
Примитивные типы: Это базовые типы, которые включают:
string: для строковых значений.number: для числовых значений.boolean: для логических значений.symbol: для уникальных идентификаторов.bigint: для больших целых чисел.nullиundefined: представляют отсутствие значения.
-
Объектные типы: Это более сложные структуры данных, такие как:
- Объекты (
{}). - Массивы (
Array<T>). - Функции (
(args: ArgsType) => ReturnType). - Интерфейсы и классы.
- Объекты (
-
Специальные типы:
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 помогает разработчикам писать более безопасный и предсказуемый код, используя преимущества статической типизации.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться