Búsqueda de sitios web

node.js - ¿Por qué se declara una variable global `name` en TypeScript y puedo evitar usarla?


Un amigo refactorizó parte del código y movió la definición de una variable llamada name desde el ámbito de nivel superior de la función al cuerpo de un then. Esta variable se utilizó en un then posterior, lo que causó un ReferenceError ya que name no estaba en el ámbito.

No podíamos entender cómo el código pasaba la compilación hasta que vimos que typescript/lib.d.ts tiene la siguiente declaración:

declare const name: never;

En resumen, tengo dos preguntas.

  1. ¿Por qué name (así como length y muchos otros globales) se añaden por defecto a TypeScript?
  2. Por el código circundante, esto parece destinado a proyectos que se ejecutan en un navegador, nosotros somos un proyecto de node.js. ¿Podemos optar por no tener estas declaraciones añadidas para nosotros?

Respuesta #1

Esto parece ser un comportamiento muy antiguo del navegador. Según MDN, tanto name como length son propiedades del objeto window.

  • https://developer.mozilla.org/es/docs/Web/API/Window/name
  • https://developer.mozilla.org/en-US/docs/Web/API/Window/length

Para deshacerse de todas las declaraciones específicas del DOM, puedes configurar la propiedad lib en tu tsconfig en consecuencia. Puedes ver todas las opciones en esta página. Echa un vistazo a la opción --lib.

Sería bueno tener una opción para decirle a TypeScript que tu código se ejecuta en Node.JS. Pero parece que aún no se ha implementado: https://github.com/Microsoft/TypeScript/issues/9466

Artículos relacionados