文章目录
- 前言
- 一、使用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;