¿Hay una diferencia entre la palabra clave 'typeof' en Javascript y Typescript?
Digamos que tengo este ejemplo.
const Bob = 'Bobby';
interface IName {
text: typeof Bob;
}
let newName: IName = {
text: 'Bobby'
}
Donde inicializo la variable 'newName', si intento cambiar el texto 'Bobby' a otra cosa, me da un error, sin embargo, el nuevo texto sigue siendo de tipo cadena.
Si hago console.log(typeof Bob) imprime 'string', así que en la interfaz la clave 'text' también debería ser de tipo 'string', ¿verdad?
Entonces, ¿por qué TypeScript limita mis opciones solo al texto 'Bobby' al establecer el valor de 'text' en 'newName'?
Respuesta #1
Debido a que Bob es const, TypeScript sabe que siempre tendrá el valor 'Bobby', por lo que refina el tipo de string a solo el tipo literal de cadena 'Bobby'. Esto luego se propaga a través de la interfaz a tu instancia newName. Si tienes un editor con soporte para TS, puedes pasar el cursor sobre IName.text y ver:
(property) IName.text: "Bobby"
JS no sabe nada sobre las anotaciones de tipo, por lo que obtienes el tipo en tiempo de ejecución, que sigue siendo string.
