Variables globales en TypeScript con Node.js

variables globales

Cómo crear variables globales en TypeScript con Node.js

En este punto, es posible que sepa que la versión 16 de Node.js ha eliminado NodeJS.Global a favor de globalThis y, por eso, la creación de variables globales puede ser un poco complicada hoy en día (consulte este enlace para obtener más información).


¿Cómo usamos para crear variables globales en Node.js 14 ≤?

Bueno, fue bastante fácil, solo teníamos que extendernos desde NodeJS.Global.

interface CustomNodeJSGlobal extends NodeJS.Global {
  myGlobalVariable: unknown
}

export { CustomNodeJSGlobal }

Luego tuvimos que declarar una variable global y, como por arte de magia, nuestra variable global estaba disponible en cualquier lugar.

import { CustomNodeJSGlobal } from "/direction/to/global.variables/file"

declare const global: CustomNodeJSGlobal

global.myGlobalVariable = 'Hi mom, look at me, I am global!'

console.log({ myGlobalVariable: global.myGlobalVariable })

¿Cómo creamos variables globales en Node.js 16 ≥?

Ahora, solo tenemos que declarar o instanciar los tipos, interfaces o variables en el espacio de nombres global, para lograr esto tenemos que crear un archivo .d.ts mira este ejemplo:

declare global {
  var globalString = 'Hi mom, I am global'
  
  interface GlobalInterface {
    value: unknown
  }

  type GlobalType = {
    value: unknown
  }
}

export {}

Aquí estamos declarando una variable global, interfaz y tipo, con esto, todos estarán disponibles en todas partes de nuestro proyecto. Y sí, desafortunadamente, tiene que usar var, de lo contrario no funcionará. Hasta ahora todo bien, ahora si queremos que TypeScript reconozca nuestra variable global, interfaz y tipo, tenemos que crear una carpeta @types y poner allí nuestro archivo .d.ts.

En caso de que queramos tener una ubicación personalizada, debemos agregarla a la matriz typeRoots en nuestro tsconfig.json. Algo como:

{
...
"compilerOptions": {
...
"typeRoots": ["path/to/our/global/variables.d.ts"],
...
}
}

En caso de que esté utilizando ts-node para ejecutar su proyecto, debe agregar la opción de archivos en su archivo tsconfig.json o seguir esta guía. Personalmente prefiero la primera opción ya que es más sencilla:

{
...
"ts-node": {
"files": true
},
...
}

Finalmente, si tiene tiempo libre, eche un vistazo a mi herramienta CLI npm, simba.js. Es algo así como cra, pero para desarrollo backend. Utiliza MongoDB, Express y TypeScript. Y con un comando simple, tendrá un servidor en ejecución con algunos puntos finales que pueden resultarle útiles.

¡Feliz codificación!

Recent Post