nodejs项目设置全局变量(global)

文章目录

  • 前言
  • 一、使用global
  • 二、解决`type 'typeof globalThis' has no index signature.ts`问题
    • 1、新建 `/types/global.d.ts`文件
    • 2、或者直接在入口文件`/src/index.ts`定义
  • 三、最终效果
    • 鼠标放在`global`上,可显示`global`的类型生效了~ ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/112b634e549141a1af0ece6d90300b2a.png)
    • `如有启发,可点赞收藏哟~`


前言

全局变量是指在程序中定义的可以在任何函数或模块中使用的变量。相比于局部变量,全局变量有以下几个好处:

  • 程序的可维护性更高:全局变量可以在任何地方被访问和修改,因此可以避免在多个函数或模块中重复定义同一个变量,减少了代码的冗余和维护成本。

  • 程序的可读性更高:使用全局变量可以让程序的逻辑更加清晰明了。在函数或模块中,如果需要使用某个变量,不需要传递参数或者使用复杂的数据结构,直接使用全局变量即可。

  • 程序的灵活性更高:全局变量可以在整个程序的任何地方使用,因此可以在不同的函数或模块中实现数据共享,提高了程序的灵活性和可扩展性。

  • 程序的效率更高:使用全局变量可以避免在函数或模块之间频繁传递参数,从而减少了程序的开销和执行时间。

不过,全局变量也存在一些潜在的问题。比如

  • 如果程序中存在大量的全局变量,可能会导致程序的内存占用过大,从而影响程序的性能。
  • 此外,全局变量也可能会被误用或滥用,导致程序的可维护性和可读性下降。
  • 因此,在使用全局变量时需要权衡其利弊,合理使用全局变量以提高程序的效率和可维护性。

例如在使用 mysql2 连接 MySQL 数据库时,可以使用 Node.js 的模块系统和全局变量来实现连接的共享。避免每次调用接口都创建连接的开销,并且可以得到更好的性能和可扩展性。
这种做法的好处是可以减少不必要的连接和断开操作,从而提高性能和效率。


一、使用global

  • 未使用Typescript,直接使用global即可

  • 使用了Typescript
    直接使用可能会出现下图错误提示
    Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature.ts(7017)
    元素隐式具有“any”类型,因为类型“typeof globalThis”没有索引签名。ts(7017)
    在这里插入图片描述

二、解决type 'typeof globalThis' has no index signature.ts问题

首先鼠标放在global上,按住ctrl并点击右键,查看引入文件
在这里插入图片描述

实测:以下两种方式,如果使用第一种,需要把上述的globalThis修改为MyGlobal
因为还是使用globalThis,虽然项目上看起来正常了,但是开启服务之后依然会报错

在这里插入图片描述

1、新建 /types/global.d.ts文件

  • 定义需要使用的global字段
/*** 自定义全局类型*/import { MySQLConnection } from "../src/data-base/connection";
import { MySQLPool } from "../src/data-base/pool";
declare var global: typeof MyGlobal;declare global {// namespace NodeJS {//     interface Global {//         dbPool: MySQLPool;//         dbConnection: MySQLConnection;//     }// }namespace MyGlobal {var dbPool: MySQLPool;var dbConnection: MySQLConnection;}
}
  • 引入.d.ts文件
    tsconfig.json文件导入
{"include": ["types/*.ts"],
}

2、或者直接在入口文件/src/index.ts定义

import { connection, pool } from "./data-base";
import { MySQLPool } from "./data-base/pool";
import { MySQLConnection } from "./data-base/connection";
declare var global: typeof MyGlobal;declare global {// namespace NodeJS {//     interface Global {//         dbPool: MySQLPool;//         dbConnection: MySQLConnection;//     }// }namespace MyGlobal {var dbPool: MySQLPool;var dbConnection: MySQLConnection;}}global.dbPool = pool;
global.dbConnection = connection;

在这里插入图片描述

三、最终效果

鼠标放在global上,可显示global的类型生效了~
在这里插入图片描述

如有启发,可点赞收藏哟~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言小游戏之三子棋(可以做期末设计作业)

哈喽大家好,今天为大家带来一个用C语言写的小游戏--三子棋,就是大家小时候用树枝和石子玩的那种游戏,这个小项目可以用于大家的C语言期末设计作业,不会很难,都是C语言基本的操作 下面是游戏截图: 完全可以…

如何在Go中使用接口

引言 编写灵活、可重用和模块化的代码对于开发通用程序至关重要。这种工作方式避免了在多个地方做相同的修改,从而确保代码更易于维护。如何做到这一点因语言而异。例如,继承是在Java、C++、C#等语言中使用的一种常见方法。 开发者也可以通过组合来达到相同的设计目标。组合…

CV计算机视觉每日开源代码Paper with code速览-2023.12.8

点击计算机视觉,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【显著目标检测】Texture-Semantic Collaboration Network for ORSI Salient Object Detection 论文地址:https://arxiv.org//pdf/…

Linux 定时器

文章目录 alarm() 函数实现定时功能setitimer() 函数实现定时功能 alarm() 函数实现定时功能 alarm()函数的签名如下&#xff1a; #include <unistd.h> unsigned int alarm(unsigned int seconds);参数1 是你想定时的秒数。 返回值是在你调用这个函数的时刻&#xff0…

LeetCode 123买卖股票的最佳时机-iii 188买卖股票的最佳时机-iv | 代码随想录25期训练营day50

动态规划算法8 LeetCode 123 买卖股票的最佳时机-iii 2023.12.13 题目链接代码随想录讲解[链接] int maxProfit(vector<int>& prices) {//1确定dp二维数组//dp[i][0]表示遍历到第i天时第一次持有股票的当前收入;dp[i][1]表示遍历到第i天时第一次未持有股票的当前…

uniapp用picker实现自定义三级联动(children)

数据大概得结构&#xff1a; html: <view class"invite"><u-cell title"点击选则" isLink :value"value" click"showstrue"></u-cell><u-picker :show"shows" ref"uPicker" :columns"…

【Hadoop】Hadoop基础架构的变化

1.x版本架构2.x版本架构3.x版本架构参考 1.x版本架构 NameNode&#xff1a;&#xff0c;负责文件系统的名字空间(Namespace)管理以及客户端对文 件的访问。NameNode负责文件元数据的管理和操作。是单节点。 Secondary NameNode&#xff1a;它的职责是合并NameNode的edit logs到…

C++ 数据结构知识点合集-C/C++ 数组允许定义可存储相同类型数据项的变量-供大家学习研究参考

#include <iostream> #include <cstring>using namespace std;// 声明一个结构体类型 Books struct Books {char title[50];char author[50];char subject[100];int book_id; };int main( ) {Books Book1; // 定义结构体类型 Books 的变量 Book1Books …

参数学习——糖果问题(人工智能期末复习)

之前看了好久都不知道这题咋写&#xff0c;后来看了这篇机器智能-高频问题&#xff1a;糖果问题&#xff0c;大概看明白了&#xff0c;其实主要围绕着这两个公式 光看公式也看不懂&#xff0c;还是要结合题目来 己知有草莓味和酸橙味两种类型的糖果&#xff0c;分别放入5种不同…

I.MX RT1170双核学习(2):双核相互激活和启动流程

RT1170这个芯片带有双核&#xff1a;Cortex-M7和Corterx-M4&#xff0c;两个核都可以独立地运行&#xff0c;当然双核也可以同时运行。在上一篇文章中&#xff0c;介绍了一下在RT1170中消息模块MU的使用&#xff1a;双核通信之MU消息单元详解&#xff0c;因为这是双核之间用来通…

跟小德学C++之代码目录

嗨&#xff0c;大家好&#xff0c;我是出生在达纳苏斯的一名德鲁伊&#xff0c;我是要立志成为海贼王&#xff0c;啊不&#xff0c;是立志成为科学家的德鲁伊。最近&#xff0c;我发现我们所处的世界是一个虚拟的世界&#xff0c;并由此开始&#xff0c;我展开了对我们这个世界…

AIGC stable diffusion学习笔记

其中用到了unet和clip clip是文本转embinding&#xff0c; clip需要token&#xff0c;token到类别的概念&#xff0c;达不到细分类别的程度&#xff0c; 比如可以到车标&#xff0c;但是具体车型的车标&#xff0c;可能区分不了。 深入浅出完整解析Stable Diffusion&#x…

SQL进阶理论篇(二):数据库的设计范式

文章目录 简介数据库的设计范式有哪些数据库中的几种键从1NF到3NF1NF2NF3NFBCNF&#xff08;巴斯范式&#xff09; 反范式设计反范式的适用场景总结参考文献 简介 本小节主要内容&#xff1a; 数据库的设计范式都有哪些数据库的键都有哪些1NF、2NF和3NF都是指什么&#xff1f…

答题记录-ORACLE

1.Oracle基于CBO模式计算的COST与哪些值有关? AIOSEEKTIM BBLOCKS CIOTFRSPEED DNUM_ROWS 2.下面SQL语句输出的结果是? select player_name , e_player_name from player where e_player_name like _A%; A查询以字母A开头的选手名称 B查询以字母A或a开头的选手名称 C…

STM32的DMA的五大问题

1&#xff0c;DMA控制器的内部结构 STM32中的DMA控制器是一种用于在外设和存储器之间传输数据的专用硬件。DMA控制器的内部结构主要包括以下几个关键部分&#xff1a; 通道&#xff1a; DMA控制器可以有多个通道&#xff0c;每个通道独立管理一个数据传输任务。通道的数量取决于…

[数据集][目标检测]道路坑洞目标检测数据集VOC+YOLO格式665张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;665 标注数量(xml文件个数)&#xff1a;665 标注数量(txt文件个数)&#xff1a;665 标注类别…

一进一出两线制(三线制)模拟量高速信号(50KHz)隔离变送器

一进一出两线制(三线制)模拟量高速信号(50KHz)隔离变送器 型号&#xff1a;JSD TA-2311F系列 产品特点&#xff1a; ◆小体积,低成本,标准 DIN35mm 导轨安装方式 ◆三端隔离(输入、输出、工作电源间相互隔离) ◆高速信号采集,隔离等(-3dB,Min≤ 3.5 uS) ◆高精度等级(0.1% F.S&…

mysql的redolog、undo、binlog的作用

概览&#xff1a; MySQL三大日志包括&#xff1a;undolog&#xff0c;redo log&#xff0c;binlog&#xff0c;它们分别有以下作用&#xff1a; undolog&#xff1a;是Innodb存储引擎事务生成的日志。用于事务的回滚和MVCC&#xff0c;保证了事务的原子性。 redo log&#x…

第二百零四回 模拟对话窗口的页面

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 经验分享5. 内容总结 我们在上一章回中介绍了"修改组件风格的另外一种方法"相关的内容&#xff0c;本章回中将介绍" 如何做一个模拟对话框窗口的页面".闲话休提&#xff0c;让我…

群晖(Synology)更换硬盘时间和精神双重折磨的教训

话说玩磁盘阵列的最后结果就是时间上负担不起&#xff0c;并且还被嫌弃。 在磁盘都到位后下一步就是要选择冗余类型了&#xff0c;对大部分人来说使用群晖自己提供的就好了&#xff0c;通常是 SHR。 什么是 SHR Synology Hybrid RAID&#xff08;SHR&#xff09;是 Synology…