在Socket.IO上发出Typescript数据对象

时间:2016-08-05 15:40:18

标签: javascript typescript socket.io

我在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,还是有更简洁的方法来执行此操作?

1 个答案:

答案 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);
});