我想将方法添加到WebScoket的原型中。但是打字稿给出了错误的说法'属性'原型'类型' WebSocketExtended''
const WS: WebSocketExtended = require('ws');
import {Server} from 'ws';
let ws: Server;
interface WebSocketExtended extends WebSocket {
json(d: any): void
}
export function start(server){
ws = new Server({server: server});
ws.on('connection', onConnection);
};
function onConnection(socket:WebSocketExtended) {
socket.json({data:'some data'});
}
WS.prototype.json = function (d) {
try {
d = JSON.stringify(d);
this.send(d);
} catch (e) {}
};
答案 0 :(得分:0)
在打字稿界面中,扩展名是开放的。这意味着只需在多个位置声明它们就可以在它们上添加新属性,编译器会将它们全部合并到一个连贯的接口中。
因此,在 WebSocket 界面上添加新属性需要做的就是重新声明与额外属性的接口。
像这样:
interface WebSocket {
json(param: string): any;
}
WebSocket.prototype.json = function (param: string) {
return param;
}