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