2016-08-05 1 views
1

J'ai défini une classe simple User dactylographiée comme suitEmitting Tapuscrit Data Objects sur Socket.IO

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

de mon serveur socket.io J'émets un message avec une version instanciée de cette classe User, par exemple,

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

sur mon client, j'écoute mon message comme suit

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

données entre prises semble donc être envoyé comme un tableau d'objets, la définition dactylographiée pour la méthode emit montre également ce, par exemple,

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

Ainsi, est la façon la plus propre pour moi d'utiliser les données envoyées à utiliser l'adressage de tableau comme indiqué dans la troisième ligne du journal de la console ci-dessus, c.-à-d. user[0].id, ou existe-t-il une manière plus propre de le faire?

Répondre

1

semble que vous pouvez faire

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

Et quand vous attrapez vous obtenez

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

Vous pouvez utiliser déstructurant pour le gérer

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

Étant nouveau js et ts, le sucre syntactique déstructurant est la chose la plus douce que j'ai apprise aujourd'hui! –