Типы индексированного доступа
Мы можем использовать тип индексированного доступа для поиска определенного свойства в другом типе:
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