node.js - Guardando más datos en el objeto socket.io en typescript
Yo normalmente solía hacer algo como socket.username=username cuando no usaba TypeScript. Pero ahora sí lo uso y cuando intento guardarlo de la misma manera me da el error
Property 'username' does not exist on type 'Socket'
Sé que esto significa que necesito extenderlo, pero lo he intentado así
interface Socket {
username: any
}
Pero no ayudó y también intenté esto,
interface SocketIO {
username: any
}
Sin suerte.
Respuesta #1
Solo socket['username']=username debería funcionar.
Si quieres seguridad de tipos y si quieres tener autocompletado para la propiedad username, puedes extender la interfaz Socket.
interface ExtendedSocket extends Socket {
username: string;
}
Luego puedes convertir el Socket original a tu tipo personalizado:
const mySocket = <ExtendedSocket>socket;
mySocket.username = 'user1'; // won't throw errors and autocomplete will work
Respuesta #2
Si quieres agregar información extra al objeto socket, puedes añadir esta información al objeto socket.data, que está declarado como any en su archivo de declaración
A continuación se muestra un fragmento del archivo socket.d.ts
/**
* Additional information that can be attached to the Socket instance and which will be used in the fetchSockets method
*/
data: any;
