typescript - typescript 上的 Socket.io 附加属性不存在

我正在使用带有 typescript 的 Socket.io v4.0.1 和按预期工作的节点/快速服务器。 问题是在连接时我想向客户端套接字发送它的 sessionID 和 userID,它们是我的服务器套接字实例上的附加属性,但是 typescript 抛出以下类型错误。

io.on("connection", (socket: Socket): void => {
  console.log(socket.id);

  socket.emit("session", {
    sessionID: socket.sessionID, // property sessionID does not exist on type Socket<DefaultEventsMap,DefaultEventsMap>
    userID: socket.userID,// property userID does not exist on type Socket<DefaultEventsMap,DefaultEventsMap>
  });
});

有没有办法在不更改类型定义本身的情况下将这些附加属性添加到类型定义中 (@types/socket.io)?

socketio's additional attributes documentation

最佳答案

解决方案是创建我自己的接口(interface),它从 Socket 类型扩展并添加所需的附加属性。

interface ISocket extends Socket {
  name?: string;
  // other additional attributes here, example:
  // surname?: string;
}

虽然我已经尝试过了,但它又给我带来了另一个错误,它基本上是说 SocketISocket 类型不兼容,因为属性“name”在类型 Socket 中缺失,在类型 ISocket 中是必需的。

该问题的解决方案是添加“?”在 name?: string 中。这使得界面中不需要该字段。

感谢@halilcakar 帮助我。

关于typescript - typescript 上的 Socket.io 附加属性不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67372494/

相关文章:

c++ - 我可以在没有默认初始化的情况下初始化数组的 std::unique_ptr (我只想让它

ruby - "+1"给我的结果与 ruby​​ 中的 "+ 1"不同?

r - 如何将经过训练和测试的随机森林模型应用于 tidymodels 中的新数据集?

c++ - 指向结构成员?

reactjs - 属性 'type' 在类型中缺失。但在类型 'Props' 中是必需的

git - 无法访问 'https://github.com/Homebrew/brew/' : L

node.js - 如何从 bull js 中删除延迟的工作?

flutter - 类型错误 : Cannot read property 'isSupported

c++ - 如何在 cpp 中为 std::unordered_map 编写自定义 hash_

amazon-ec2 - Tensorflow 安装在 AWS ec2 实例上终止