2016-08-05 8 views
1

ich eine einfache User Klasse in Typoskript definiert alsEmitting Typoskript Datenobjekte auf Socket.IO

export class User { 
    constructor(public id: string); 
} 

von meinem socket.io Server folgt ausstoßen ich eine Nachricht mit einer instanziierten Version dieser User Klasse, zum Beispiel,

var user = new User('billy'); 
io.emit('MyMessage', user); 

auf meinem Client ich für meine Nachricht zu hören, wie

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' 
} 
folgt

Daten zwischen den Buchsen daher als ein Array von Objekten gesendet werden wird, zeigt die Typoskript Definition für das emit Verfahren auch dies, dh

emit(event: string, ...args: any[]): Namespace; 

Damit ist der sauberste Weg für mich, um die gesendeten Daten zu verwenden, um Verwenden Sie die Array-Adressierung wie in der dritten Protokollzeile der Konsole oben gezeigt, z. B. user[0].id, oder gibt es eine sauberere Möglichkeit, dies zu tun?

Antwort

1

scheint, wie Sie

io.emit('MyMessage', user, someData, someAnotherData); 

tun können, und wenn Sie es Ihnen

io.on('MyMessage', data => {  
    data[0] // user 
    data[1] // someData 
    data[2] // someAnotherData 
}); 

bekommen fangen können Sie Destrukturierung verwenden, um es zu js und ts

io.on('MyMessage', ([user]: [User]) => {  
    console.log(user.id); 
}); 
+0

Sein neuer zu verwalten, der destrukturierende syntaktische Zucker ist das Süßeste, was ich heute gelernt habe! –

Verwandte Themen