nodejs instalar example node.js typescript global

instalar - Extender el objeto global de TypeScript en node.js



typescript npm (4)

Vi esta publicación de SO y traté esto:

Probablemente tengas algo como vendor.d.ts :

// some import // AND/OR some export declare module NodeJS { interface Global { spotConfig: any } }

Su archivo debe estar limpio de cualquier import o exports nivel raíz. Eso convertiría el archivo en un módulo y lo desconectaría del espacio de nombres de declaración de tipo global .

Más: https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

Tengo una aplicación node.js que adjunta información de configuración al objeto global :

global.myConfig = { a: 1, b: 2 }

El compilador de TypeScript no le gusta esto porque el tipo Global no tiene ningún objeto llamado myConfig :

TS2339: La propiedad ''myConfig'' no existe en el tipo ''Global''.

No quiero hacer esto

global[''myConfig''] = { ... }

¿Cómo extiendo el tipo Global para que contenga myConfig o simplemente le pido a TypeScript que se calle y confíe en mí? Prefiero el primero.

No quiero cambiar las declaraciones dentro de node.d.ts Vi esta publicación de SO y traté esto:

declare module NodeJS { interface Global { myConfig: any } }

como una forma de extender la interfaz Global existente, pero no parece tener ningún efecto.


Lo único que me funciona es esto:

// lib / my.d.ts

import Global = NodeJS.Global; export interface CDTGlobal extends Global { cdtProjectRoot: string }

y luego usarlo en otros archivos como tal

import {CDTGlobal} from "../lib/my.d.ts"; declare const global: CDTGlobal; const cwd = global.cdtProjectRoot; // works


Para evitar que Typescript reclame algo como esto:

TS2339: La propiedad ''myConfig'' no existe en el tipo ''Global''.

Sugiero definir tipos personalizados. Lo hago bajo el archivo src/types/custom.d.ts en mi proyecto:

declare global { namespace NodeJS { interface Global { myConfig: { a: number; b: number; } } } }

Luego me tsconfig.json que tsconfig.json considere en el archivo tsconfig.json :

{ ... "files": [ ... "src/types/custom.d.ts" ] }

Ahora estás seguro de usar tu propiedad personalizada:

console.log(global.myConfig.a);


Poner el siguiente archivo en el directorio raíz de nuestro proyecto funcionó.

global.d.ts

declare namespace NodeJS { export interface Global { myConfig: any } }

Estamos utilizando "@types/node": "^7.0.18" y TypeScript Version 2.3.4 . Nuestro archivo tsconfig.json se ve así:

{ "compilerOptions": { "module": "commonjs", "target": "es6" }, "exclude": [ "node_modules" ] }