typescript node怎么声明全局变量?

最近在学ts,对于全局变量的这块有点不太理解。比如原来的 node 中的这样一个表达式

global.sql = require('./tools/mysql').sql;

这样就可以定义一个全局变量了。
而在ts中应该怎样定义这个sql全局变量呢?

阅读 19.2k
2 个回答

首先,TypeScript不鼓励写全局变量,鼓励用模块系统。因此TS没有,也不会有方便的写global的方式。
其次,TypeScript的模块系统已经换成ES标准的import/export了,不应该继续用require

然后回答你的问题吧,定义全局变量的方式是

  1. 在sql.ts里面写

    import { sql } from './tools/mysql'
    
    type SQL = typeof sql
    declare global {
        namespace NodeJS {
            interface Global {
                sql: SQL
            }
        }
    }
    global.sql = sql
  2. 新建一个sql.d.ts,放到任何一个TS会读取的位置(项目里/include/lib),里面写

    import { sql } from 'path-to-project/tools/mysql'
    
    type SQL = typeof sql
    declare global {
        namespace NodeJS {
            interface Global {
                sql: SQL
            }
        }
    }

项目内的所有文件都能自动找到这个声明。(不鼓励这种写法,但是评论里居然真的有人问该怎么用……那就补全一点吧)

但是我推荐的做法是,在每个需要用到sql的地方都

import { sql } from './tools/mysql'

这样也不用担心会不会有其他人把sql覆盖掉。

如果这种util太多,应该单独抽出来

// util.ts
export { sql } from './tools/mysql'

// app.ts
import util from './util.ts'
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题