当前位置: 首页 > 知识库问答 >
问题:

在TypeScript中创建全局变量

韶和璧
2023-03-14

在JavaScript中,我可以这样做:

 something = 'testing';

然后在另一个文件中:

 if (something === 'testing')

它将定义某些东西(只要它们以正确的顺序被调用)。

我似乎不知道如何在TypeScript中做到这一点。

这就是我尝试过的。

在.d.ts文件中:

interface Window { something: string; }

然后在我的main.ts文件中:

 window.something = 'testing';

然后在另一个文件中:

 if (window.something  === 'testing')

这是有效的。但是我希望能够丢失窗口。部分,只需要让我的东西成为全局的。有没有办法在TypeScript中做到这一点?

(如果有人感兴趣,我确实在尝试为我的应用程序设置日志记录。我希望能够从任何文件调用log.Debug,而无需导入和创建对象。)


共有3个答案

隗锐进
2023-03-14

我就是这样修复的:

步骤:

  1. 声明了一个全局命名空间,例如custom.d.ts,如下所示:
js prettyprint-override">declare global {
    namespace NodeJS {
        interface Global {
            Config: {}
        }
    }
}
export default global;
"typeRoots": ["src/types/custom.d.ts" ]
console.log(global.config)

注:

>

在我的例子中,要求是在启动应用程序之前设置全局变量,并且该变量应该访问整个依赖对象,以便我们能够获得所需的配置属性。

希望这有帮助!

非常感谢。

岳研
2023-03-14

这就是未来。

首先,TypeScript文件有两种作用域

如果您的文件没有任何导入导出行,则此文件将在全局范围内执行,其中的所有声明都在此文件之外可见。

因此,我们将创建如下全局变量:

// xx.d.ts
declare var age: number

// or 
// xx.ts
// with or without declare keyword
var age: number

// other.ts
globalThis.age = 18 // no error

所有的魔法都来自var。将var替换为letconst将不起作用。

如果您的文件有任何导入导出行,则此文件将在其自身范围内执行,我们需要通过合并声明来扩展全局范围。

// xx[.d].ts
declare global {
  var age: number;
}

// other.ts
globalThis.age = 18 // no error

您可以在官方文档中查看有关模块的更多信息

拓拔弘化
2023-03-14

.d.ts定义文件中

type MyGlobalFunctionType = (name: string) => void

如果在浏览器中工作,则会将成员添加到浏览器的窗口上下文中:

interface Window {
  myGlobalFunction: MyGlobalFunctionType
}

NodeJS也有同样的想法:

declare module NodeJS {
  interface Global {
    myGlobalFunction: MyGlobalFunctionType
  }
}

现在声明根变量(它将实际存在于window或global上)

declare const myGlobalFunction: MyGlobalFunctionType;

然后在一个常规的.ts文件中,但作为副作用导入,您实际上实现了它:

global/* or window */.myGlobalFunction = function (name: string) {
  console.log("Hey !", name);
};

最后,在代码库中的其他地方使用它,方法如下:

global/* or window */.myGlobalFunction("Kevin");

myGlobalFunction("Kevin");
 类似资料:
  • 我得到一个编译错误的代码: 我想让“match”成为一个全局变量。 我的编译错误是: “内部类TestingProgramm中的静态声明非法。匹配修饰符”static“只允许在常量变量声明中使用 在初始化期间使用静态非final变量。“ 我不知道这个错误是什么意思,也不知道如何修复它。

  • 问题内容: 在我的android应用程序中,我需要放置可变成员id的位置。问题是,它是从在线API获取的,我需要找到一种存储/检索它的方法 我尝试将其放在自定义类中,但是问题是,如果我取消活动,它将丢失,我还知道有一种方法可以扩展应用程序。 所以我想知道存储全局变量的最佳方法是什么? 我必须实现: 将变量保存在onSaveState上 将其保存在sharepref 手动保存 手动检索 谢谢 更新:

  • 问题内容: 我试图设置一个全局变量。就我而言,只是一个布尔标志,用于指示是否首次显示视图: 呈现视图后,我想将此标志设置为false: 然后检查它: 因此,我想创建一个全局变量。在哪里以及如何?我试过了: 在我的视图控制器领域 在我的AppDelegate.swift文件中的方法中 在班上 没运气。我收到一条错误消息 (注意:我意识到,在这个问题中,我背叛了我对Swift中如何处理范围的无知。请原

  • 问题内容: 我有一个全局变量,需要在我的ViewController之间共享。 在Objective-C中,我可以定义静态变量,但是找不到在Swift中定义全局变量的方法。 您知道这样做的方法吗? 问题答案: 来自官方的Swift编程指南: 全局变量是在任何函数,方法,闭包或类型上下文之外定义的变量。全局常数和变量总是延迟计算的。 您可以在任何文件中定义它,也可以在任何位置访问它。因此,您可以在任

  • 问题内容: 有没有一种方法可以在SQL Server中创建全局变量,从而即使重新启动服务器也可以保留该变量,所以我可以在函数中使用它? 我需要的示例: 除非我明确声明,否则永远不要删除此变量。 问题答案: 我想这对我来说将是最好的:

  • 我在typescript中声明了一个全局变量,类似于:global。test=“something”我尝试这样做,我得到错误属性“test”在类型“Global”上不存在。