2017-06-27 11 views
1

WebScoketのプロトタイプにメソッドを追加します。しかし、typescriptですが、「プロパティ 『プロトタイプが』タイプに存在しません 『というエラーを与える』」typescriptですインタフェースでプロパティ '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) {} 
}; 

答えて

0

をWebSocketExtended延長に開放されています。つまり、複数の場所で宣言するだけで新しいプロパティを追加することができます。コンパイラはそれらをすべて1つのコヒーレントなインターフェイスにマージするように注意します。

このように、WebSocketインターフェイスに新しいプロパティを追加するためには、追加のプロパティとのインターフェイスを再宣言する必要があります。このよう

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

} 

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

同じファイルに含まれている場合これは動作します。インターフェイス宣言を別のファイルに移動すると、socket.json()にエラーが発生します。定義されていないメソッド –

+0

このファイルを最初にインポートする必要があるため、定義とプロトタイプが追加されます。 'import' ./path/to/otherfile '; 'それを行うべきです。できれば、プロジェクトのルートのどこかでこれを行うことができます(複数の場所で使用する必要がある場合)。 – toskv

+1

実際には同じファイル内では機能しません。私は私の心に来たすべての変種を試しました。すべてのケースでエラーが表示されます。あなたの側でこれを確認できますか? https://codeshare.io/ayDgVo –

関連する問題