我在Typescript中定义了一个简单的User
类,如下所示
export class User {
constructor(public id: string);
}
从我的socket.io服务器我发出一条消息,其中包含此User
类的实例化版本,例如,
var user = new User('billy');
io.emit('MyMessage', user);
在我的客户端上我按照以下方式收听消息
io.on('MyMessage', (user: User) => {
console.log(user); // This prints '[object]'
console.log(user.id); // This prints 'undefined'
console.log(user[0].id); // This prints 'billy'
}
套接字之间的数据因此似乎是作为一个对象数组发送的,emit
方法的打字稿定义也显示了这一点,即
emit( event: string, ...args: any[]): Namespace;
因此,对于我来说,最简单的方法是使用发送的数据来使用数组寻址,如上面的第三个控制台日志行所示,即user[0].id
,还是有更简洁的方法来执行此操作?
答案 0 :(得分:2)
好像你可以做到
io.emit('MyMessage', user, someData, someAnotherData);
当你抓住它时,你得到了
io.on('MyMessage', data => {
data[0] // user
data[1] // someData
data[2] // someAnotherData
});
您可以使用解构来管理它
io.on('MyMessage', ([user]: [User]) => {
console.log(user.id);
});