我正在嘗試在 TypeScript 中添加一個全域范圍變數(這意味著可以從任何地方訪問它而無需從另一個檔案匯入/要求它)。
如果這是在 JavaScript (NodeJS) 中,它看起來像這樣:
// index.js
globalThis.helloWorld = 'Hello World!';
require('./log.js')
// log.js
console.log(helloWorld);
// output
Hello World!
我在 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
我也試過使用global.GLOBAL_EVENTS,但無濟于事,它有效。我哪里做錯了?
uj5u.com熱心網友回復:
這是一個運行時錯誤 ( ReferenceError)的事實告訴您這不是 TypeScript 問題。問題是GLOBAL_EVENTS.on(...)代碼在 中的globalThis.GLOBAL_EVENTS = new EventEmitter();代碼之前運行app.ts,因此GLOBAL_EVENTS(盡管在 TypeScript 中定義)在運行時尚不存在。
您需要確保app.ts在其他檔案之前首先運行,以便GLOBAL_EVENTS在使用之前創建。
(這是不使用全域變數而是使用模塊匯出的一個很好的原因:然后模塊系統將確保模塊在使用其匯出之前已加載并準備就緒。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383503.html
上一篇:優化打字稿中的條件檢查
下一篇:等待IIFE結果與單獨的異步函式
