Tipos de acceso indexado
Podemos usar un tipo de acceso indexado para buscar una propiedad específica en otro tipo:
type Person = { age: number; name: string; alive: boolean };
type Age = Person["age"];
type Age = number
El tipo de indexación es en sí mismo un tipo, por lo que podemos usar uniones, keyof
u otros tipos por completo:
type I1 = Person["age" | "name"];
type I1 = string | number
type I2 = Person[keyof Person];
type I2 = string | number | boolean
type AliveOrName = "alive" | "name";
type I3 = Person[AliveOrName];
type I3 = string | boolean
Incluso verás un error si intentas indexar una propiedad que no existe:
type I1 = Person["alve"];
Error generado
Property 'alve' does not exist on type 'Person'.
Otro ejemplo de indexación con un tipo arbitrario es usar number
para obtener el tipo de elementos de una array.
Podemos combinar esto con typeof
para capturar convenientemente el tipo de elemento de un literal de array:
const MyArray = [
{ name: "Alice", age: 15 },
{ name: "Bob", age: 23 },
{ name: "Eve", age: 38 },
];
type Person = typeof MyArray[number];
type Person = {
name: string;
age: number;
}
type Age = typeof MyArray[number]["age"];
type Age = number
// Or
type Age2 = Person["age"];
type Age2 = number
Solo puedes usar tipos al indexar, lo que significa que no puedes usar const
para hacer una referencia a una variable:
const key = "age";
type Age = Person[key];
Error generado
Type 'key' cannot be used as an index type.'key' refers to a value, but is being used as a type here. Did you mean 'typeof key'?
Sin embargo, puedes usar un alias de tipo para un estilo similar de refactorización:
type key = "age";
type Age = Person[key];
Última actualización