如何使用 Node.js 在 TypeScript 中创建全局变量

此时,我们可能知道 Node.js 版本 16 已删除 NodeJS.Global 以支持 globalThis,因此创建全局变量现在可能有点棘手。

我们如何在 Node.js 14 及以下版本中使用创建全局变量?

嗯,这很简单,我们只需要从 NodeJS.Global 扩展。

interface CustomNodeJSGlobal extendsNodeJS.Global {

myGlobalVariable: unknown

}

export { CustomNodeJSGlobal }

然后我们必须声明一个全局变量,就像魔术一样,我们的全局变量在任何地方都可用。

import { CustomNodeJSGlobal } from"/direction/to/global.variables/file"

declare constglobal: CustomNodeJSGlobal

global.myGlobalVariable = 'Hi, look at me, I am global!'

console.log({ myGlobalVariable: global.myGlobalVariable })

我们如何在 Node.js 16 及以上版本中使用创建全局变量?

现在,我们只需要在全局命名空间中声明类型、接口或变量,为此我们必须创建一个 .d.ts 文件,看这个例子:

declare global {

varglobalString: string

interface GlobalInterface {

value: unknown

}

type GlobalType = {

value: unknown

}

}

export {}

在这里,我们声明了一个全局变量、接口和类型,这样,所有这些都将在我们项目的任何地方都可用。 是的,不幸的是,我们必须使用 var,否则它将不起作用。 到目前为止,一切都很好,现在如果我们想让 TypeScript 识别我们的全局变量、接口和类型,我们必须创建一个 @types 文件夹并将我们的 .d.ts 文件放在那里。

但是,这种方式主要用于声明全局变量,如果只需要声明全局接口或类型,还有更简单的方式。 假设我们想将自定义 DTO 定义为接口,因为 DTO 可以在许多地方使用,那么可能会发现将其声明为全局接口或类型很有用。 你怎么能这样? 好吧,只需要在 @types 文件夹中创建一个 d.ts 文件,让我们想象一下 DTO 代表一个用户,如下所示:

interface DtoUser {

id: string

lastName: string

name: string

}

所以你只需要在你的 @types 文件夹中创建一个文件,比如说 user.d.ts,就是这样。 现在,我们 DTO 可以在全局范围内使用,但我们甚至可以通过创建一个 dto 文件夹并将所有 DTO 放在那里来改进这种方法,然后,如果需要它,就可以为自己的类型或接口创建一个新文件夹。

初始化变量

正如我们上面所说的,可以声明全局变量,不幸的是不能初始化它们,为什么? 我没有头绪。

但是,我发现了一种我们可能会觉得有用的方法,假设你想在某个文件中使用 globalString。 首先,你必须初始化你的全局变量,我建议你在自己的应用程序的入口点完成(只是为了组织),它看起来像:

entryPoint.ts

global.globalString = 'Hi mom, I am global'

然后,我们可以使用 globalString(不带全局)访问全局变量,例如:

console.log({ globalString })

自定义类型文件夹

如果我们想要自定义位置,我们必须将其添加到 tsconfig.json 中的 typeRoots 数组中。 就像是:

{

...

"compilerOptions":{

...

"typeRoots":["path/to/our/global/variables.d.ts"],

...

}

}

如果使用 ts-node 运行项目,我们必须在 tsconfig.json 文件中添加 files 选项,或者按照本指南进行操作。 就个人而言,我更喜欢第一个选项,因为它更简单:

{

...

"ts-node":{

"files":true

},

...

}

就是这样,我们的全局变量、接口和类型随处可用!

本文转载自:迹忆客(https://www.jiyik.com)

以上是 如何使用 Node.js 在 TypeScript 中创建全局变量 的全部内容, 来源链接: utcz.com/z/290321.html

回到顶部