El operador de tipo `typeof`
El operador de tipo typeof
JavaScript ya tiene un operador typeof que puedes usar en un contexto de expresión:
// Imprime "string"console.log(typeof "Hello world");TypeScript agrega un operador typeof que puedes usar en un contexto type para referirte al type de una variable o propiedad:
let s = "hello";let n: typeof s;
let n: stringEsto no es muy útil para tipos básicos, pero combinado con otros operadores de tipo, puedes usar typeof para expresar convenientemente muchos patrones.
Por ejemplo, comencemos mirando el tipo predefinido ReturnType<T>.
Toma un tipo de función y produce su tipo de retorno:
type Predicate = (x: unknown) => boolean;type K = ReturnType<Predicate>;
type K = booleanSi intentamos usar ReturnType en el nombre de una función, vemos un error instructivo:
function f() { return { x: 10, y: 3 };}type P = ReturnType<f>;'f' refers to a value, but is being used as a type here. Did you mean 'typeof f'?Recuerda que valores y tipos no son lo mismo.
Para referirnos al tipo que tiene el valor f usamos typeof:
function f() { return { x: 10, y: 3 };}type P = ReturnType<typeof f>;
type P = { x: number; y: number;}Limitaciones
TypeScript limita intencionalmente los tipos de expresiones en las que puedes usar typeof.
Específicamente, solo es legal usar typeof en identificadores (es decir, nombres de variables) o sus propiedades.
Esto ayuda a evitar la trampa confusa de escribir código que crees que se está ejecutando, pero no lo está:
// Diseñado para usar = ReturnType<typeof msgbox>let shouldContinue: typeof msgbox("Are you sure you want to continue?");',' expected.