node.js - TypeScript global variabel är inte definierad, deklarerad i declare global{}


Jag försöker lägga till en global variabel (vilket betyder att den kan nås från var som helst utan att behöva importera/kräva den från en annan fil) i TypeScript.

Om detta är i JavaScript (NodeJS), skulle det se ut så här:

// index.js
globalThis.helloWorld = 'Hello World!';
require('./log.js')

// log.js
console.log(helloWorld);

// output
Hello World!

Vad jag kämpar mot i TypeScript:

// types.ts
// ...
declare global{
  var GLOBAL_EVENTS: EventEmitter
}
// ...


// app.ts
// ...
globalThis.GLOBAL_EVENTS = new EventEmitter()
// ...


// usage in another file
// ...
GLOBAL_EVENTS.on(...)
// ...


// output:
ReferenceError: GLOBAL_EVENTS is not defined

Jag har försökt använda global.GLOBAL_EVENTS också, men utan resultat, det fungerar. Var gjorde jag fel?

Svar #1

Faktumet att det är ett körfel (ReferenceError) visar att detta inte är ett TypeScript-problem. Problemet är att koden GLOBAL_EVENTS.on(...) körs innan koden globalThis.GLOBAL_EVENTS=new EventEmitter(); i app.ts, så GLOBAL_EVENTS (även om den är definierad i TypeScript) existerar inte än vid körning.

Du behöver se till att app.ts körs först, innan den andra filen, så att GLOBAL_EVENTS skapas innan det används.

(Detta är en av de goda anledningarna till att inte använda globala variabler och istället använda en export från en modul: Då skulle modulsystemet säkerställa att modulen är laddad och redo innan dess exporter används.)