¿Para qué sirve el operador keyof de TypeScript?
El operador keyof
tomas el tipo de objeto y produce un string o union literal numérica de sus propiedades.
type Coordenada = { x: number; y: number };
type P = keyof Coordenada;
// = tipo P es = a keyof Coordenada ('x' | 'y')
let a: P = "x";
let b: P = "y";
let c: P = "d"; // <- aqui se presenta un error porque "d" no es parte de los keys
En el anterior ejemplo el tipo
Coordenada
tiene dos propiedadesx
yy
, por lo cualkeyof Coordenada
equivale a'x' | 'y'
.
Si el tipo tiene un índice string
o number
, keyof
retornará estos tipos como parte de la unión.
Si usamos keyof
para referenciar a un Mapa entonces la unión de string | number
.
type Mapa = { [k: string]: boolean };
type D = keyof Mapa;
// type de D = string | number
const i: D = 12;
const j: D = "hola";
Para los arreglos esto representa solo number
, por lo que utilizar un string
generará un error en el compilador.
type Arreglo = { [k: number]: unknown };
type B = keyof Arreglo;
// type de B = string
const x: B = 12;
const y: B = "hola"; // <- los arreglos no permiten índices tipo string