Как создать доступную для записи глобальную переменную в typcript node.js - PullRequest
0 голосов
/ 22 декабря 2018

Я объявил 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 Ответ

0 голосов
/ 22 декабря 2018

В 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.

Универсальный

Вы также можете описать переменную, которая уже является частью вашей среды и доступна как клиенту, так иserver.

Примером такой переменной может быть process - это часть среды Node.js, но инструменты сборки, такие как Webpack, могут предоставлять ее содержимое клиенту.

import * as io from 'socket.io';

declare global {
  var SocketServer: io.Server;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...