Podemos usar un tipo de acceso indexado para buscar una propiedad específica en otro tipo:
Prueba este código ↗
type Person = { age : number ; name : string ; alive : boolean };
type Age = Person [ " age " ];
El tipo de indexación es en sí mismo un tipo, por lo que podemos usar uniones, keyof
u otros tipos por completo:
Prueba este código ↗
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:
Prueba este código ↗
type I1 = Person [ " alve " ];
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:
Prueba este código ↗
{ name: " Alice " , age: 15 },
{ name: " Bob " , age: 23 },
{ name: " Eve " , age: 38 },
type Person = typeof MyArray[number];
type Age = typeof MyArray[number][ " age " ];
type Age2 = Person [ " age " ];
Solo puedes usar tipos al indexar, lo que significa que no puedes usar const
para hacer una referencia a una variable:
Prueba este código ↗
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:
Prueba este código ↗