如何使用 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