物业'原型'在类型上不存在

时间:2017-06-27 10:00:27

标签: typescript

我想将方法​​添加到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) {}
};

1 个答案:

答案 0 :(得分:0)

在打字稿界面中,扩展名是开放的。这意味着只需在多个位置声明它们就可以在它们上添加新属性,编译器会将它们全部合并到一个连贯的接口中。

因此,在 WebSocket 界面上添加新属性需要做的就是重新声明与额外属性的接口。

像这样:

interface WebSocket {
    json(param: string): any;

}

WebSocket.prototype.json = function (param: string) {
    return param;
}