Socket.io с наблюдаемым fromEvent и Typescript в NodeJS - PullRequest
0 голосов
/ 31 декабря 2018

Я хочу связать событие сокета с RxJs.Я довольно новый в RxJs.Я использую машинопись с NodeJs.Я пытался реализовать Socket.io с RxJs после некоторых блогов, но имел проблемы с типами, показывая ошибку socket.Server нельзя назначить FromEventTarget <{}>.

.Rxjs 6.3.3, Node 10.14.2, Socket-io 2.2.0, Typescript 2.9.2, Express 4.16.4

 import * as socketio from "socket.io";
 import { of, fromEvent } from 'rxjs';
 import { switchMap, map, mergeMap, takeUntil, tap } from 'rxjs/operators';

  class SocketServer {
    createSocketServer(http) {
    const io$ = of(socketio(http));
            const connection$ = io$.pipe(
        switchMap((io) => {
            return fromEvent(io, 'connection').pipe( 
    // ====> this line io giving error Argument of type 'Server' is not assignable to parameter of type 'FromEventTarget<{}>'.
    // ==> Property 'off' is missing in type 'Server' but required in type 'JQueryStyleEventEmitter'.ts(2345)
                tap(res => console.log('socket conected success fully', res)),
                map(client => ({ io, client }))
            )
        })
    );
    // Stream of disconnections
    const disconnect$ = connection$.pipe(
        mergeMap(({ client }) => {
            return fromEvent(client, 'disconnect').pipe(  
    // <===== in this line showing error type client: {} not assignable to FromEventTarget<{}>
                map(() => client)
            )
        })
    );
    // On connection, listen for event
    const listen = (event) => {
        return connection$.pipe(
            mergeMap(({ io, client }) => {
                return fromEvent(client, event).pipe(
                    takeUntil(disconnect$),
                    map(data => ({ io, client, data }))
                )
            })
        )
    }
     }

 }

Поиск лучшего решения для этого шаблона для реализации сокета с RxJ с Typescript и узла.

...