логотип PurpleSchool
логотип PurpleSchool

typeof в TypeScript

Автор

Дмитрий Нечаев

TypeScript предоставляет разработчикам уникальные возможности для управления типами данных. Одной из ключевых особенностей языка является оператор typeof, который позволяет получать тип переменной. В TypeScript этот оператор имеет расширенные возможности по сравнению с JavaScript, так как он может использоваться не только во время выполнения программы, но и на этапе компиляции для создания и управления типами данных. Рассмотрим простой пример использования:

let exampleVar = "Привет, TypeScript!";
type ExampleVarType = typeof exampleVar;  // Тип будет 'string'

Здесь typeof помогает определить тип переменной exampleVar, что позволяет TypeScript обеспечить соответствующую типизацию.

Оператор типа typeof

Оператор typeof в TypeScript используется для создания типов на основе значений переменных. Это чрезвычайно полезно для создания точных и динамически изменяемых типов, что упрощает масштабирование и поддержку кода. Пример создания типа на основе объекта:

const user = { name: "Алиса", age: 30 };
type UserType = typeof user;  // Тип UserType теперь { name: string; age: number; }

В этом примере typeof используется для захвата структуры объекта user, создавая тип UserType, который полностью соответствует структуре объекта.

Ограничения

Несмотря на универсальность, использование typeof в TypeScript имеет ряд ограничений. Оператор не всегда способен точно определить или воспроизвести сложные или пользовательские типы данных, особенно когда они зависят от внешнего контекста или выполнения программы. Также typeof не может напрямую извлекать типы, которые являются результатами сложных выражений или функций, возвращающих разные типы в зависимости от условий. Чтобы получить тип возвращаемого значения, нужно использовать утилиту ReturnType. Например:

class Product {
  getPrice() {
    return { amount: 100, currency: "USD" };
  }
}

let product = new Product();
type PriceType = ReturnType<typeof product.getPrice>;  // Тип будет { amount: number; currency: string; }

В данном случае, typeof product.getPrice возвращает тип самой функции getPrice. Чтобы получить тип возвращаемого значения getPrice, ReturnType<typeof product.getPrice> корректно выводит тип { amount: number; currency: string; }. Использование ReturnType помогает избежать путаницы и обеспечивает точное определение типа возвращаемого значения функции.

Заключение

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

Оператор типа keyof в TypeScriptСтрелочка вправо

Постройте личный план изучения Typescript до уровня Middle — бесплатно!

Typescript — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Typescript

Открыть базу знаний

Лучшие курсы по теме

изображение курса

TypeScript с нуля

Антон Ларичев
иконка часов21 бесплатный урок
иконка звёздочки рейтинга4.7
Backend
Frontend
Mobile
изображение курса

CSS Flexbox

Антон Ларичев
иконка часов28 бесплатных уроков
иконка звёздочки рейтинга4.9
Frontend
изображение курса

Next.js - с нуля

Антон Ларичев
иконка часов23 бесплатных урока
иконка звёздочки рейтинга4.7
Frontend