Los aumentos para el alcance global solo se pueden anidar directamente en módulos externos o declaraciones de módulos ambientales (2669)

Resuelto Crocsx asked hace 5 años • 3 respuestas

Me gustaría almacenar mi configuración de NodeJS en el ámbito global.

Intenté seguir esto => Ampliar el objeto global TypeScript en node.js y otra solución en stackoverflow,

Hice un archivo llamado global.d.ts donde tengo el siguiente código

declare global {
    namespace NodeJS {
      interface Global {
          config: MyConfigType
      }
    }
  }

Los aumentos para el alcance global solo se pueden anidar directamente en módulos externos o declaraciones de módulos ambientales.ts(2669)

pero hacer esto funciona bien =>

declare module NodeJS  {
    interface Global {
        config: MyConfigType
    }
}

El problema es que necesito importar el archivo MyConfigTypepara escribir la configuración, pero la segunda opción no lo permite.

Crocsx avatar Jul 21 '19 17:07 Crocsx
Aceptado

Puedes indicar que el archivo es un módulo así:

export {};

declare global {
    namespace NodeJS {
        interface Global {
            config: MyConfigType
        }
    }
}
sshh avatar Dec 27 '2019 11:12 sshh

O si estás intentando agregar un tipo global dentro del contexto del navegador:

export {};

declare global {
  interface Window {
    ENV: any;
  }
}
Ben Winding avatar Dec 07 '2020 23:12 Ben Winding

Si se .d.tsestá ejecutando como un "script" (no tiene import/exportdeclaraciones), no será necesario hacerlo declare globalen absoluto y simplemente podrá eliminarlo. Ya se está ejecutando un "script" en el contexto global.

(aparte: esta es la razón por la que agregar export {}funciona, lo convierte de un "script" en un "módulo" y sus declaraciones en ya .d.tsno son globales de forma predeterminada)

Con un ejemplo modificando console:

Antes:

declare global {
  interface Console {
    log2: (...args: any[])=>void;
  }
}

Después:

// This will be global!
interface Console {
  log2: (...args: any[])=>void;
}

Gracias a @okcoker y https://stackoverflow.com/a/42257742/2759427 por la explicación de los contextos .d.ts

Cobertos avatar May 12 '2023 05:05 Cobertos