0Pricing
TypeScript Academy · Урок

Типы индексированного доступа

Получайте типы свойств с помощью синтаксиса T[K]

«Типы индексированного доступа» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Получение типов свойств

Типы индексированного доступа позволяют получить тип свойства с помощью синтаксиса квадратных скобок в позиции типа: Obj['prop']. Это похоже на чтение значения, но выполняется на уровне типов.

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

Обратитесь к типу по ключу-литералу, чтобы извлечь тип соответствующего свойства. Запись User['name'] даёт тип string.

interface User { id: number; name: string }
type NameType = User["name"] // string
const n: NameType = "Ada"
console.log(n)

Почему бы просто не записать тип

Индексированный доступ поддерживает синхронизацию типов. Если User.name изменится с типа string на другой тип, каждый экземпляр User['name'] обновится автоматически — без ручных правок.

interface Product { price: { amount: number; currency: string } }
type Price = Product["price"] // { amount: number; currency: string }
const p: Price = { amount: 10, currency: "USD" }
console.log(p)

Доступ с объединением ключей

Обратитесь к типу по объединению ключей, чтобы получить объединение типов их значений. Запись User['id' | 'name'] даёт number | string.

interface User { id: number; name: string }
type IdOrName = User["id" | "name"] // number | string
const v: IdOrName = 5
console.log(v)

Obj[keyof Obj] для всех значений

Обратитесь к типу по keyof Obj, чтобы получить объединение всех типов значений объекта — полный набор типов его значений.

interface Config { host: string; port: number; secure: boolean }
type Values = Config[keyof Config] // string | number | boolean
const v: Values = true
console.log(v)

Тип элемента массива с помощью [number]

Для типа массива используйте индекс number, чтобы получить тип его элементов. Запись string[][number] даёт тип string.

type Names = string[]
type Item = Names[number] // string
const x: Item = "Ada"
console.log(x)

Тип элемента кортежа

Индексация кортежа с помощью number даёт объединение типов всех его элементов — это удобно для вывода типа значения из фиксированного списка.

type Pair = [string, number]
type Element = Pair[number] // string | number
const e: Element = 42
console.log(e)

Объединение с typeof

Получите тип значения с помощью typeof. В сочетании с [number] для массива as const это позволяет вывести объединение литеральных значений массива.

const colors = ["red", "green", "blue"] as const
type Color = typeof colors[number] // "red" | "green" | "blue"
const c: Color = "green"
console.log(c)

Вложенный индексированный доступ

Цепочка обращений позволяет углубиться во вложенные типы. Каждая пара скобок спускается на один уровень структуры.

interface Data { user: { profile: { age: number } } }
type Age = Data["user"]["profile"]["age"] // number
const a: Age = 36
console.log(a)

Индексированный доступ в обобщённых типах

Шаблон T[K] вместе с K extends keyof T лежит в основе типобезопасных функций чтения: возвращаемый тип в точности совпадает с типом найденного свойства.

function get<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key]
}
const port = get({ host: "x", port: 80 }, "port")
console.log(port) // 80, typed as number

Практический вывод типа

Индексированный доступ избавляет от дублирования типов: тип аргумента функции можно вывести непосредственно из объекта предметной области, не объявляя его повторно.

interface Order { items: { sku: string; qty: number }[] }
type LineItem = Order["items"][number] // { sku: string; qty: number }
const li: LineItem = { sku: "A1", qty: 2 }
console.log(li)

Быстрая проверка

Проверьте, насколько хорошо Вы понимаете типы индексированного доступа.

Итоги

Типы индексированного доступа (Obj['prop']) находят тип свойства и остаются синхронизированными с исходным типом. Используйте объединение ключей, чтобы получить объединение типов значений, keyof Obj — чтобы получить все значения, а number — чтобы получить типы элементов массива или кортежа. Для вложенных обращений объединяйте пары скобок, а для типобезопасного вывода сочетайте этот подход с typeof и обобщёнными типами (T[K]).

Часто задаваемые вопросы

Урок «Типы индексированного доступа» бесплатный?

Да — полный текст урока «Типы индексированного доступа» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Типы индексированного доступа»?

Получайте типы свойств с помощью синтаксиса T[K] Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

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

Сколько времени занимает урок «Типы индексированного доступа»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Оператор типов typeof
  2. Оператор типов keyof
  3. Типы индексированного доступа
  4. Объединение typeof и keyof
← Назад к TypeScript Academy