2017-06-27 4 views
1

Ich möchte Methode zum Prototyp von WebScoket hinzufügen. Aber Typoskript gibt Fehler zu sagen ‚Property‚Prototyp‘existiert nicht auf Typ‚WebSocketExtended‘‘Eigenschaft "Prototyp" existiert nicht auf Typ

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) {} 
}; 

Antwort

0

In Typoskript Schnittstellen sind offen für Erweiterung. Das bedeutet, dass Sie neue Eigenschaften hinzufügen können, indem Sie sie an mehreren Stellen deklarieren. Der Compiler wird darauf achten, sie alle zu einer einheitlichen Schnittstelle zusammenzuführen.

Als solche, was Sie tun müssen, um eine neue Eigenschaft auf der WebSocket Schnittstelle hinzuzufügen, ist diese Schnittstelle mit der zusätzlichen Eigenschaft neu deklarieren.

So:

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

} 

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

Dies funktioniert, wenn sie in der gleichen Datei enthalten. Aber wenn ich die Interface-Deklaration in eine separate Datei verschiebe, bekomme ich einen Fehler bei socket.json(). Undefinierte Methode –

+0

Sie müssen diese Datei zuerst in diese Datei importieren, damit die Definitionen und der Prototyp hinzugefügt werden. ein 'Import './path/to/otherfile';' sollte es tun. Vorzugsweise können Sie dies an der Wurzel Ihres Projekts tun (wenn es an mehreren Stellen verwendet werden muss). – toskv

+1

Eigentlich funktioniert es nicht in der gleichen Datei. Ich habe alle Varianten ausprobiert, die mir einfielen. Ich sehe Fehler in allen Fällen. Könntest du das auf deiner Seite überprüfen? https://codeshare.io/ayDgVo –

Verwandte Themen