Variables globales en TypeScript con Node.js

[vc_row el_class=”blog-info”][vc_column][vc_single_image source=”featured_image” img_size=”full” style=”vc_box_rounded”][vc_empty_space height=”40px”][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text el_class=”font-weight-bold”]

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).

[/vc_column_text][vc_empty_space height=”40px”][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text]


¿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!

[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row el_class=”social-info”][vc_column width=”1/6″][/vc_column][vc_column width=”2/3″][vc_row_inner][vc_column_inner width=”1/2″][vc_column_text][social_share_button themes=’theme1′][/vc_column_text][/vc_column_inner][vc_column_inner el_class=”youtube-inner-col” width=”1/2″][vc_column_text][likebtn theme=”youtube” lang=”auto” show_like_label=”0″ white_label=”1″ alignment=”right”][/vc_column_text][/vc_column_inner][/vc_row_inner][vc_row_inner el_class=”social-info-inner”][vc_column_inner width=”1/4″][vc_single_image image=”921″][/vc_column_inner][vc_column_inner width=”3/4″][vc_column_text]

Diego Pacheco

Ingeniero en Sitemas, MBA (Babson College). Desarrollador PHP/Java/JavaScript. Fundador & CEO de EpicStudio. Entusiasta de las tecnologías web (JavaScript, Vue, Laravel, AWS, Docker) Viajes, Negocios, Surf y Growth.[/vc_column_text][asvc_list_item icon_fontawesome=”fa fa-calendar-o” icon_size=”14px”]Programar una reunión[/asvc_list_item][/vc_column_inner][/vc_row_inner][/vc_column][vc_column width=”1/6″][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

Recent Post

[/vc_column_text][lvca_posts_carousel posts_query=”size:3|order_by:rand|post_type:post” image_linkable=”true” image_size=”full” taxonomy_chosen=”post_tag” display_title=”true” display_post_date=”true” display_summary=”true” autoplay_speed=”3000″ animation_speed=”300″ display_columns=”3″ scroll_columns=”3″ gutter=”3″ tablet_display_columns=”2″ tablet_scroll_columns=”2″ tablet_gutter=”3″ tablet_width=”800″ mobile_display_columns=”1″ mobile_scroll_columns=”1″ mobile_gutter=”3″ mobile_width=”480″][vc_empty_space height=”20px”][/vc_column][/vc_row]