首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在TypeScript中创建全局变量

在TypeScript中创建全局变量
EN

Stack Overflow用户
提问于 2016-08-12 05:22:27
回答 13查看 197.8K关注 0票数 125

在JavaScript中,我可以这样做:

代码语言:javascript
复制
 something = 'testing';

然后在另一个文件中:

代码语言:javascript
复制
 if (something === 'testing')

它将定义something (只要它们是以正确的顺序调用的)。

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

这就是我尝试过的。

在.d.ts文件中:

代码语言:javascript
复制
interface Window { something: string; }

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

代码语言:javascript
复制
 window.something = 'testing';

然后在另一个文件中:

代码语言:javascript
复制
 if (window.something  === 'testing')

,这是可行的。但我希望能够去掉其中的 window. 部分,只想让我的成为全局的。有没有办法在TypeScript中做到这一点?

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

EN

回答 13

Stack Overflow用户

发布于 2017-04-20 23:31:46

.d.ts定义文件中

代码语言:javascript
复制
type MyGlobalFunctionType = (name: string) => void

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

代码语言:javascript
复制
interface Window {
  myGlobalFunction: MyGlobalFunctionType
}

NodeJS也有同样的想法:

代码语言:javascript
复制
declare module NodeJS {
  interface Global {
    myGlobalFunction: MyGlobalFunctionType
  }
}

现在你声明了root变量(它将实际存在于窗口或全局)

代码语言:javascript
复制
declare const myGlobalFunction: MyGlobalFunctionType;

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

代码语言:javascript
复制
global/* or window */.myGlobalFunction = function (name: string) {
  console.log("Hey !", name);
};

最后在代码库的其他地方使用它,使用以下两种方法之一:

代码语言:javascript
复制
global/* or window */.myGlobalFunction("Kevin");

myGlobalFunction("Kevin");
票数 71
EN

Stack Overflow用户

发布于 2019-07-11 16:36:01

globalThis就是未来。

首先,TypeScript文件有两种scopes

全局作用域

如果您的文件没有任何全局作用域importexport 行,则此文件将在全局作用域中执行,以确保其中的所有声明在此文件外部可见。

所以我们会像这样创建全局变量:

代码语言:javascript
复制
// 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。用letconst替换var将不起作用。

模块作用域

如果您的文件具有任何全局import行或export ,则此文件将在其自身的范围内执行,我们需要通过declaration-merging扩展。

代码语言:javascript
复制
// xx[.d].ts
declare global {
  var age: number;
}

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

您可以在official docs

中查看有关模块的更多信息

票数 62
EN

Stack Overflow用户

发布于 2019-07-11 16:10:44

这就是我修复它的方法:

步骤:

  1. 为custom.d.ts声明了一个全局名称空间,如下所示:

代码语言:javascript
复制
declare global {
    namespace NodeJS {
        interface Global {
            Config: {}
        }
    }
}
export default global;

  1. 将上面创建的文件映射到"tsconfig.json“中,如下所示:

代码语言:javascript
复制
"typeRoots": ["src/types/custom.d.ts" ]

  1. 在任意文件中获取上面创建的全局变量,如下所示:

代码语言:javascript
复制
console.log(global.config)

备注:

  1. typescript版本:“3.0.1”。
  2. 在我的例子中,要求在启动应用程序之前设置全局变量,并且变量应该在整个依赖对象中访问,以便我们可以获得所需的配置属性。

希望这能有所帮助!

谢谢

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38906359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档