我正在使用带有 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;
}
虽然我已经尝试过了,但它又给我带来了另一个错误,它基本上是说 Socket
和 ISocket
类型不兼容,因为属性“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 中的新数据集?
reactjs - 属性 'type' 在类型中缺失。但在类型 'Props' 中是必需的
git - 无法访问 'https://github.com/Homebrew/brew/' : L
node.js - 如何从 bull js 中删除延迟的工作?
flutter - 类型错误 : Cannot read property 'isSupported