Type Manipulation, operador typeof

JavaScript tiene ya incluido el operador typeof.

console.log(typeof "Hola Mundo"); // -> string

TypeScript agrega al operador typeof mayor contexto para asignar un tipo a una variable o propiedad.

let s = "hola mundo";

let n: typeof s; // <- ahora n es tipo string

Esto no es muy útil para tipos básicos, pero combinado con otros operadores, se puede utilizar typeof para expresar distintos patrones. Por ejemplo, el tipo ReturnType utiliza internamente typeof para asignar el tipo que retorna una función.

type P = (c: unknown) => boolean;

type K = ReturnType<P>; // <- el tipo de K es boolean

Si intentamos utilizar ReturnType usando el nombre de una función el compilador generará un error.

function H() {
    return "hola mundo";
}

type F = ReturnType<H>; // <- esto no esta permitido

Limitaciones

TypeScript limita intencionalmente los tipos de expresiones que se pueden utilizar con typeof.

Específicamente, solo se permite utilizar typeof en identificadores (por ejemplo nombres de variables) en sus propiedades. Esto evite confusiones al momento de escribir el código.