迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Node.js >

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

作者:迹忆客 最近更新:2023/05/09 浏览次数:

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

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

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

interface CustomNodeJSGlobal extends NodeJS.Global {
  myGlobalVariable: unknown
}

export { CustomNodeJSGlobal }

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

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

declare const global: CustomNodeJSGlobal

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

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

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

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

declare global {
  var globalString: 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
  },
  ...
}

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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Node.js 中编码 URL

发布时间:2023/03/27 浏览次数:201 分类:Node.js

在这篇简短的文章中,我们将学习如何在 Node.js 中进行 URL 编码。

在 Node.js 中编码 Base64

发布时间:2023/03/27 浏览次数:155 分类:Node.js

在本文中,我们将学习如何在 Node.js 中将字符串或文本转换为 base64。

Node.js 与 React JS 的比较

发布时间:2023/03/27 浏览次数:137 分类:Node.js

本文比较和对比了两种编程语言,Node.js 和 React。React 和 Node.js 都是开源 JavaScript 库的示例。 这些库用于构建用户界面和服务器端应用程序。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便