如何从'ws'库中扩展接口 WebSocket?



我尝试扩展库的接口,但没有成功:(

请帮助我!我尝试从WS库

扩展Websocket接口
...
declare class WebSocket extends events.EventEmitter {
   ...
}
declare namespace WebSocket {
   ...
}
export = WebSocket;

我需要添加isalive:boolean到WebSocket类

尝试:

从'ws'导入ws;

declare module 'ws' {
    export interface WebSocket {
        isAlive: boolean;
    }
}

,但这无济于事

我最初将其发布在github github上。

declare module "ws" {
  class _WS extends WebSocket { }
  export interface WebSocket extends _WS {
      isAlive: boolean;
  }
}

尽管这是行不通的(因为WebSocket这里是指类,而不是声明的接口):

socket.on('connection', (ws: WebSocket, req: http.IncomingMessage) => {
    ws.isAlive = true;
}

虽然这些:

  1. 没有类型定义:
socket.on('connection', (ws, req: http.IncomingMessage) => {
    ws.isAlive = true;
}
  1. 使用类型定义(WebSocket.WebSocket):
socket.on('connection', (ws: WebSocket.WebSocket, req: http.IncomingMessage) => {
    ws.isAlive = true;
}

另一个解决方法是创建一个扩展Websocket并投入到它的类。在WebSocketEx.ts中添加:

  import WebSocket from 'ws'
  export default interface WebSocketEx extends WebSocket {
    myProperty?: string
  }

这样使用:

  import WebSocketEx from './WebSocketEx'
  fastify.get('/', { websocket: true }, function wsHandler(connection, req) {
    const socket = connection.socket // This is original WebSocket
    const socketEx = (socket as unknown) as WebSocketEx
    socketEx.myProperty = 'abcdef'
    socketEx.on('message', (message) => {
      log(`WS: message: ${JSON.stringify(message)}`)
    })
interface WebSocket {
    online: boolean;
}

最新更新