我尝试扩展库的接口,但没有成功:(
请帮助我!我尝试从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;
}
虽然这些:
- 没有类型定义:
socket.on('connection', (ws, req: http.IncomingMessage) => {
ws.isAlive = true;
}
- 使用类型定义(
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;
}