【问题标题】:Emitting Typescript Data Objects on Socket.IO在 Socket.IO 上发出 Typescript 数据对象
【发布时间】:2016-08-05 15:40:17
【问题描述】:

我在 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,还是有更简洁的方式来做到这一点?

【问题讨论】:

    标签: javascript typescript socket.io


    【解决方案1】:

    好像你能做到

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

    【讨论】:

    • 刚接触js和ts,解构语法糖是我今天学到的最甜的东西!
    猜你喜欢
    • 2018-06-12
    • 2018-07-27
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多