Spec-Zone.ru › Socket.IO 4

TypeScript

Начиная с версии v3, Socket.IO теперь имеет поддержку типов TypeScript.

Типы для сервера

Сначала объявите некоторые типы:

interface ServerToClientEvents {
  noArg: () => void;
  basicEmit: (a: number, b: string, c: Buffer) => void;
  withAck: (d: string, callback: (e: number) => void) => void;
}

interface ClientToServerEvents {
  hello: () => void;
}

interface InterServerEvents {
  ping: () => void;
}

interface SocketData {
  name: string;
  age: number;
}

И используйте их при создании вашего сервера:

const io = new Server<ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData>();

Затем используйте помощь вашей IDE!

События, объявленные в интерфейсе ServerToClientEvents используются при отправке и трансляции событий:

io.on("connection", (socket) => {
  socket.emit("noArg");
  socket.emit("basicEmit", 1, "2", Buffer.from([3]));
  socket.emit("withAck", "4", (e) => {
    // e is inferred as number
  });

  // works when broadcast to all
  io.emit("noArg");

  // works when broadcasting to a room
  io.to("room1").emit("basicEmit", 1, "2", Buffer.from([3]));
});

Те, которые объявлены в интерфейсе ClientToServerEvents используются при получении событий:

io.on("connection", (socket) => {
  socket.on("hello", () => {
    // ...
  });
});

Те, которые объявлены в интерфейсе InterServerEvents используются для межсерверной связи (добавлены в socket.io@4.1.0):

io.serverSideEmit("ping");

io.on("ping", () => {
  // ...
});

И, наконец, тип SocketData используется для типизации атрибута socket.data (добавлен в socket.io@4.4.0):

io.on("connection", (socket) => {
  socket.data.name = "john";
  socket.data.age = 42;
});

Эти подсказки по типам не заменяют правильной валидации/санизации входных данных. Как обычно, никогда не доверяйте входным данным пользователя.

Типы для клиента

На стороне клиента вы можете повторно использовать те же интерфейсы ServerToClientEvents и ClientToServerEvents:

import { io, Socket } from "socket.io-client";

// please note that the types are reversed
const socket: Socket<ServerToClientEvents, ClientToServerEvents> = io();

Аналогично, события, объявленные в интерфейсе ClientToServerEvents используются при отправке событий:

socket.emit("hello");

И те, которые объявлены в ServerToClientEvents используются при получении событий:

socket.on("noArg", () => {
  // ...
});

socket.on("basicEmit", (a, b, c) => {
  // a is inferred as number, b as string and c as buffer
});

socket.on("withAck", (d, callback) => {
  // d is inferred as string and callback as a function that takes a number as argument
});

© 2014–2021 Automattic
Licensed under the MIT License.
https://socket.io/docs/v4/typescript

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API