如何初始化类型界面?

时间:2018-12-05 09:13:18

标签: angular typescript

我是Typescript的新手。 现在正面临着我的难题。

我想在Rxjs中初始化WebSocketSubjectConfig的“ WebSocketCtor”字段的Typescript接口字段,但是我不知道该怎么做。

我的开发环境是
npm =「5.6.0」
节点=「8.11.1」
角度=「6.0.3」
rxjs =「6.2.0」

下面是我的代码

/** setting of websocket */
protected getWebsocketConfig(url:string) : WebSocketSubjectConfig<any>{
    return {
                url: url,
                /*
                I can't init this field. how to init ?
                WebSocketCtor: {
                    WebSocket:new WebSocket(url);
                },
                */
                openObserver: {
                    next: (_e: Event) => {
                        console.log("Websocket is open!!!!");
                        console.dir(_e);
                    }
                },
                closeObserver: {
                    next: (_e: CloseEvent) => {
                        console.log("Websocket is close !!!!")
                    }
                },
           };
}

我认为WebSocketSubject的取消订阅方法会关闭websocket连接。 但是看起来好像不行。 我认为如果关闭websocket连接,则需要实现“ WebsocketCtor”并调用Websocket的close方法。

WebSocketSubjectConfig接口在

下方
export interface WebSocketSubjectConfig {
    ・・・
    openObserver?: NextObserver;
    closeObserver?: NextObserver;
    WebSocketCtor?: {
        new (url: string, protocols?: string | string[]): WebSocket;
    };
}

感谢您的合作。

2 个答案:

答案 0 :(得分:0)

类型中的new关键字定义该类型应具有与该签名匹配的构造函数。因此,WebSocketCtor必须是一个带有构造函数的对象,该构造函数需要一个string和一个可选的string | string[],并返回一个WebSocket对象。符合此要求的对象是WebSocket类/构造函数本身!

protected getWebsocketConfig(url:string) : WebSocketSubjectConfig<any>{
    return {
                url: url,
                WebSocketCtor: WebSocket,
                openObserver: {
                    next: (_e: Event) => {
                        console.log("Websocket is open!!!!");
                        console.dir(_e);
                    }
                },
                closeObserver: {
                    next: (_e: CloseEvent) => {
                        console.log("Websocket is close !!!!")
                    }
                },
           };
}

答案 1 :(得分:0)

使用此:

protected getWebsocketConfig(url: string): WebSocketSubjectConfig<any> {
        return {
            url: url,
            WebSocketCtor: WebSocket, // <-- this
            openObserver: {
                next: (_e: Event) => {
                    console.log("Websocket is open!!!!");
                    console.dir(_e);
                }
            },
            closeObserver: {
                next: (_e: CloseEvent) => {
                    console.log("Websocket is close !!!!")
                }
            },
        };
    }