我声明了一个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)
答案 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;
}