我使用的是带有typescript的Socket.io v4.0.1和一个节点/express服务器,它可以正常工作。问题是,在连接时,我希望向客户端套接字发出它的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)的情况下将这些附加属性添加到类型定义中?
发布于 2021-05-05 10:30:55
解决方案是创建我自己的接口,该接口从套接字类型扩展并添加所需的附加属性。
interface ISocket extends Socket {
name?: string;
// other additional attributes here, example:
// surname?: string;
}
虽然我已经尝试过了,但它抛出了另一个错误,基本上是说类型Socket
和ISocket
不兼容,因为类型Socket
上缺少属性"name“,而类型ISocket
中需要属性”name“。
这个问题的解决方案是添加"?“在name?: string
中。这使得该字段在界面中不是必需的。
感谢@halilcakar帮助我。
https://stackoverflow.com/questions/67372494
复制相似问题