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语言基本的操作 下面是游戏截图: 完全可以…

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到…

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

之前看了好久都不知道这题咋写&#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;我展开了对我们这个世界…

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

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

STM32的DMA的五大问题

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

一进一出两线制(三线制)模拟量高速信号(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…

【C语言程序设计】数组程序设计

目录 前言 一、数组的定义和初始化 二、数组的基本操作 三、数组的高级应用 四、程序设计 4.1 程序设计第一题 4.2 程序设计第二题 4.3 程序设计第三题 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助…

【什么是POI,为什么它会导致内存溢出?】

什么是POI&#xff0c;为什么它会导致内存溢出 什么是POIExcel并没看到的那么小POI的溢出原理 拓展知识几种Workbook格式 什么是POI Apache POl&#xff0c;是一个非常流行的文档处理工具&#xff0c;通常大家会选择用它来处理Excel文件。但是在实际使用的时候经常会遇到内存溢…

textarea 网页文本框在光标处添加内容

在前端研发中我们经常需要使用脚本在文本框中插入内容。如果产品要求不能直接插入开始或者尾部&#xff0c;而是要插入到光标位置&#xff0c;此时我们就需要获取光标/光标选中的位置。 很多时候&#xff0c;我在格式化文本处需要选择选项&#xff0c;将选择的信息输入到光标位…

html 中vue3 的setup里调用element plus的弹窗 提示

引入Elementplus之后&#xff0c;在setup&#xff08;&#xff09;方法外面导入ElMessageBox const {ElMessageBox} ElementPlus 源码 &#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><!-- import Vue before Elemen…

CAN 三: STM32 CAN相关寄存器介绍

1、寄存器列表&#xff08;F1/F4/F7&#xff09; 寄存器名称作用CAN_MCRCAN主控制寄存器主要负责CAN工作模式的配置CAN_BTR位时序寄存器用来设置分频/TBS1/TBS2/TSWJ等参数&#xff0c;设置测试模式CAN_(T/R)IxR标识符寄存器存放(待发送/接收)的报文ID、扩展ID、IDE位及RTR位C…