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.mfbz.cn/a/243205.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

05 python数据容器

5.1 数据容器认识 5.2 python列表 5.2.1 列表的定义 演示数据容器之:list 语法:[元素,元素,....] #定义一个列表List List [itheima,uityu,gsdfg] List1 [itheima,6666,True] print(List) print(List1) print(type(List)) pr…

smartKettle离线部署及问题记录

目录 📚第一章 前言📗背景📗目的📗总体方向 📚第二章 部署📗源码下载📗后端部署📕导入后端项目📕修改settings.xml(自动下载相关jar包)📕 编译📕 …

0x13 链表与邻接表

0x13 链表与邻接表 数组是一种支持随机访问,但不支持在任意位置插入和删除元素的数据结构。与之相对应,链表支持在任意位置插入或删除元素,但只能按顺序依次访问其中元素。我们可以使用一个struct来表示链表的节点,其中可以存储任…

MySQL线上死锁案例分析

项目场景 项目开发中有两张表:c_bill(账单表),c_bill_detail(账单明细表),他们的表结构如下(这里只保留必要信息): CREATE TABLE c_bill_detail (id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 主…

Gin之GORM 查询语句

前期工作可以看之前的(连接数据库;以及确定要操作的库) Gin之GORM 操作数据库(MySQL)-CSDN博客https://blog.csdn.net/m0_72264240/article/details/134948202?spm1001.2014.3001.5502这次我们操作gin库下的另外一个…

Lenovo联想拯救者Legion Y9000X 2021款(82BD)原装出厂Windows10系统

链接:https://pan.baidu.com/s/1GRTR7CAAQJdnh4tHbhQaDQ?pwdl42u 提取码:l42u 联想原厂WIN10系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式&am…

记录汇川:套接字TCP通信-梯形图

H5U集成一路以太网接口。使用AutoShop可以通过以太网方便、快捷对H5U进行行监控、下载、上载以及调试等操作。同时也可以通过以太网与网络中的其他设备进行数据交互。H5U集成了Modbus-TCP协议,包括服务器与客户端。可轻松实现与支持Modbus-TCP的设备进行通讯与数据交…

Redis哨兵模式:什么是哨兵模式、哨兵模式的优缺点、哨兵模式的主观下线和客观下线、投票选举、Redis 哨兵模式搭建

文章目录 什么是哨兵模式哨兵模式的优缺点主观下线和客观下线投票选举哨兵模式场景应用Redis version 6.0.5 集群搭建下载文件环境安装解压编译配置文件启动关闭密码设置 什么是哨兵模式 哨兵模式是Redis的高可用解决方案之一,它旨在提供自动故障转移和故障检测的功…

数据分析基础之《numpy(3)—基本操作》

一、基本操作 1、adarray.方法() 2、np.函数名() 二、生成数组的方法 1、生成0和1的数组 为什么需要生成0和1的数组? 我们需要占用位置,或者生成一个空的数组 (1)ones(shape[, dtype, order]) 生成一组1 shape:形…

STM32读取EEPROM存储芯片AT24C512故障然后排坑记录

背景: 有一个项目用到STM32F091芯片去读取 AT24C512C-SSHD EEPROM 芯片,我直接移植了之前项目的IIC库,结果程序运行后,读不出EEPROM里面的数据。 摘要: 本文主要介绍一个基于STM32F091芯片和AT24C512C-SSHD EEPROM芯片…

Java面向对象思想以及原理以及内存图解

文章目录 什么是面向对象面向对象和面向过程区别创建一个对象用什么运算符?面向对象实现伪代码面向对象三大特征类和对象的关系。 基础案例代码实现实例化创建car对象时car引用的内存图对象调用方法过程 成员变量和局部变量作用范围在内存中的位置 关于对象的引用关系简介相关…

6、生产者压缩算法面面观

生产者压缩算法面面观 1、怎么压缩?2、何时压缩?2.1、生产者端2.2、Broker 端 3、何时解压缩?4、各种压缩算法对比 压缩的思想,实际就是用时间去换空间的经典 trade-off 思想,在 Kafka 中,就是用 CPU 时间去…

Linux | 多线程

前言 本文主要介绍多线程基础知识,以及使用多线程技术进行并发编程;最后会介绍生产者消费者模型; 一、线程基本认识 1、什么是线程 如果你是科班出生,你肯定听过线程相关概念;但是你可能没有真正搞懂什么是线程&#…

十八)Stable Diffusion使用教程:艺术二维码案例

今天说说怎么样使用SD生成艺术二维码。 我们直接上图。 方式有三种,分别如下: 1)方式一:直接 contronet 的tile模型进行控制 使用QRBTF Classic生成你的二维码。 首先输入网址,选择喜欢的二维码样式(推荐第一种就行): 然后选择相应参数,这里推荐最大的容错率,定…

Linux 安装图形界面 “startx”

———————————————— 报错,如下: bash :startx command not found ———————————————— 解决方法: 1.先安装 — X Windows System,输入以下命令: yum groupinstall “X Window System”…

第一个“hello Android”程序

1、首先安装Android studio(跳过) Android Studio是由Google推出的官方集成开发环境(IDE),专门用于Android应用程序的开发。它是基于JetBrains的IntelliJ IDEA IDE构建的,提供了丰富的功能和工具&#xff0…

2002-2023年各省环境规制力度数据(ZF报告词频环境规制关键词词频统计)

2002-2023年各省环境规制力度数据(ZF报告词频环境规制关键词词频统计) 1、时间:2001-2022年 2、指标:文本总长度、仅中英文-文本总长度、文本总词频-全模式、文本总词频-精确模式、环境规制力度词频和、环境保护、环保、污染、能…

Linux常用命令(二)

目录 Linux常用命令(二)1、grep命令2、df命令3、hostname命令4、ps命令5、top命令6、echo命令7、cal命令8、firewall-cmd命令9、du命令10、netstat命令 Linux常用命令(二) 1、grep命令 功能说明:查找文件里符合条件的字符串。 举 例:ps aux | grep yum…

高通平台开发系列讲解(SIM卡篇)SIM卡基础概念

文章目录 一、SIM卡基本定义二、卡的类型三、SIM卡的作用三、SIM卡基本硬件结构四、SIM卡的内部物理单元五、卡文件系统沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍SIM的相关组件。 一、SIM卡基本定义 功能和作用:SIM卡的主要功能是存储用户的身份信…