Оператор типов typeof
Получайте тип значения во время выполнения с помощью typeof
«Оператор типов typeof» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Типы на основе значений
Оператор типа typeof выводит статический тип из значения во время выполнения. Он позволяет один раз записать значение и повторно использовать его структуру как тип, поддерживая их полное соответствие.
Два разных оператора typeof
Не путайте их: оператор typeof в JavaScript во время выполнения возвращает строку, а оператор typeof в TypeScript появляется в позиции типа и создаёт тип. Ключевое слово одно и то же, но контексты разные.
const n = 42
console.log(typeof n) // "number" — JS runtime
type T = typeof n // number — TS type positionПолучение типа переменной
Поместите typeof перед значением в аннотации типа, чтобы получить выведенный тип этого значения. Здесь T становится типом string.
const greeting = "hello"
type G = typeof greeting // string
const another: G = "world"
console.log(another)Получение структуры объекта
При применении к объекту, объявленному через const, оператор typeof возвращает всю выведенную структуру объекта — нет необходимости вручную записывать интерфейс.
const config = { host: "localhost", port: 8080 }
type Config = typeof config // { host: string; port: number }
const c: Config = { host: "127.0.0.1", port: 3000 }
console.log(c)По умолчанию вывод типов расширяет литералы
Без дополнительных указаний TypeScript расширяет литералы: port: 8080 становится типом number, а не литеральным типом 8080. Часто это удобно, но иногда требуется сохранить точное значение.
const settings = { mode: "dark" }
type S = typeof settings // { mode: string }
const x: S = { mode: "anything" }
console.log(x)Оператор typeof и as const
Добавьте as const, чтобы зафиксировать значение в его наиболее узком литеральном типе. Теперь typeof сохраняет точные литералы и помечает всё как readonly.
const settings = { mode: "dark" } as const
type S = typeof settings // { readonly mode: "dark" }
const x: S = { mode: "dark" }
console.log(x)Литеральные типы из массивов
При использовании as const оператор typeof для массива возвращает кортеж только для чтения, состоящий из литеральных типов, — основу для вывода объединений значений.
const roles = ["admin", "editor", "viewer"] as const
type Roles = typeof roles // readonly ["admin", "editor", "viewer"]
console.log(roles[0])Вывод объединения значений
Объедините typeof с индексированным доступом через [number], чтобы преобразовать массив констант в объединённый тип его значений.
const roles = ["admin", "editor", "viewer"] as const
type Role = typeof roles[number] // "admin" | "editor" | "viewer"
const r: Role = "editor"
console.log(r)Оператор typeof для функций
Можно получить и тип функции. Это удобно для типизации оболочек или повторного использования сигнатуры в другом месте.
function add(a: number, b: number) { return a + b }
type AddFn = typeof add // (a: number, b: number) => number
const myAdd: AddFn = (x, y) => x + y
console.log(myAdd(2, 3))Синхронизация типов
Главное преимущество заключается в следующем: определите конфигурацию или константы один раз как значения, а затем выведите типы с помощью typeof. Измените значение — и тип обновится автоматически, без дублирования.
const defaults = { retries: 3, timeout: 1000 }
type Defaults = typeof defaults
function apply(opts: Defaults) { return opts.retries }
console.log(apply(defaults))Работает только с идентификаторами
Оператор типа typeof принимает идентификатор или путь к свойству, а не произвольное выражение. Запись typeof (a + b) недопустима.
const obj = { user: { name: "Ada" } }
type Name = typeof obj.user.name // string
const n: Name = "Leo"
console.log(n)Быстрая проверка
Проверьте, насколько хорошо Вы понимаете оператор типа typeof.
Повторение
Оператор типа typeof (в позиции типа) выводит тип из значения — переменной, объекта, массива или функции. По умолчанию литералы расширяются; добавьте as const, чтобы сохранить точные литеральные типы как значения только для чтения. В сочетании с индексированным доступом (typeof arr[number]) оператор даёт объединения значений. Вывод типов из значений обеспечивает единый источник истины и избавляет от дублирования структур.
Часто задаваемые вопросы
Урок «Оператор типов typeof» бесплатный?
Да — полный текст урока «Оператор типов typeof» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Оператор типов typeof»?
Получайте тип значения во время выполнения с помощью typeof Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Оператор типов typeof»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Оператор типов typeof
- Оператор типов keyof
- Типы индексированного доступа
- Объединение typeof и keyof