Типы индексированного доступа
Получайте типы свойств с помощью синтаксиса 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 — локальная установка не требуется.
Все уроки этого курса
- Оператор типов typeof
- Оператор типов keyof
- Типы индексированного доступа
- Объединение typeof и keyof