ウェブサイト検索

typescript - 型に 'prototype' プロパティは存在しません


WebSocket のプロトタイプにメソッドを追加したいです。しかし、TypeScript は「'WebSocketExtended' 型には 'prototype' プロパティが存在しません」というエラーを出します。

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

TypeScriptでは、インターフェースは拡張可能です。つまり、複数の場所で宣言するだけで新しいプロパティを追加でき、コンパイラがそれらをすべて統合して一つの矛盾のないインターフェースにまとめてくれます。

したがって、WebSocket インターフェースに新しいプロパティを追加するために必要なことは、追加のプロパティを持つそのインターフェースを再宣言することです。

こんな感じ:

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

}

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

関連記事