Spec-Zone.ru › TypeScript 5.1

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

Мы можем использовать тип индексированного доступа для поиска определенного свойства в другом типе:

type Person = { age: number; name: string; alive: boolean };
type Age = Person["age"];

Тип индексации сам по себе является типом, поэтому мы можем использовать объединения, keyof, или другие типы целиком:

type I1 = Person["age" | "name"];
 
type I2 = Person[keyof Person];
 
type AliveOrName = "alive" | "name";
type I3 = Person[AliveOrName];

Вы даже увидите ошибку, если попытаетесь индексировать свойство, которого не существует:

type I1 = Person["alve"];

Еще один пример индексации с произвольным типом — использование number для получения типа элементов массива. Мы можем объединить это с typeof для удобного захвата типа элементов массива-литерала:

const MyArray = [
  { name: "Alice", age: 15 },
  { name: "Bob", age: 23 },
  { name: "Eve", age: 38 },
];
 
type Person = typeof MyArray[number];
type Age = typeof MyArray[number]["age"];
// Or
type Age2 = Person["age"];

Вы можете использовать только типы при индексировании, то есть вы не можете использовать const для создания переменной ссылки:

const key = "age";
type Age = Person[key];

Однако, вы можете использовать псевдоним типа для аналогичного вида рефакторинга:

type key = "age";
type Age = Person[key];

© 2012-2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://www.typescriptlang.org/docs/handbook/2/indexed-access-types.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API