如何在node.js打字稿中创建可写的全局变量

时间:2018-12-22 16:39:06

标签: typescript variables global

我声明了一个global变量

import * as io from "socket.io";

declare let SocketServer: io.Server

并尝试写入另一个文件,但是此变量是只读的。

那么如何使其可写?

更新

// global.d.ts 
import * as io from "socket.io";

declare global {
  let server_socket: io.Server
  let user_socket: io.Socket
}

// server.ts
import * as io from "socket.io";

console.log(server_socket)

R demo

1 个答案:

答案 0 :(得分:2)

在TypeScript中,declare块用于描述您的全局变量。换句话说,它们是一种告诉TypeScript在全局命名空间中可以期待什么的方法,但是作为开发人员,您有责任确保它们确实在其中。

创建(和描述)全局变量的方式取决于平台。

浏览器(DOM)

import * as io from 'socket.io';

window.SocketServer = io.default();

declare global {
  interface Window {
    SocketServer: io.Server;
  }
}

需要@types/socket.io。通过访问window.SocketServer被消耗。

Node.js

import * as io from 'socket.io';

declare global {
  namespace NodeJS {
    interface Global {
      SocketServer: io.Server
    }
  }
}

global.SocketServer = io.default();

需要@types/socket.io@types/node。通过访问global.SocketServer被消耗。

通用

您还可以描述一个变量,该变量已经是您环境的一部分,并且客户端和服务器均可访问。

此类变量的示例为process-它是Node.js环境的一部分,但是Webpack之类的构建工具可以将其内容公开给客户端。

import * as io from 'socket.io';

declare global {
  var SocketServer: io.Server;
}