代码之家  ›  专栏  ›  技术社区  ›  WasiF

如何在中创建可写全局变量js节点打字稿

  •  0
  • WasiF  · 技术社区  · 6 年前

    我已经宣布 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)
    

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  2
  •   Karol Majewski    6 年前

    用打字机, 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 .

    节点.js

    import * as io from 'socket.io';
    
    declare global {
      namespace NodeJS {
        interface Global {
          SocketServer: io.Server
        }
      }
    }
    
    global.SocketServer = io.default();
    

    @types/node . 通过访问 global.SocketServer

    万能的

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

    process 它是节点.js但是像Webpack这样的构建工具可以向客户端公开其内容。

    import * as io from 'socket.io';
    
    declare global {
      var SocketServer: io.Server;
    }