2017-10-10 2 views
0

In meiner ausdrücklichen App habe ich folgende Middleware:Wie kann ich diesen Typ reparieren X ist nicht zu Typ Y-Fehler in Typoskript zuweisbar?

app.use(function(req, res, next) { 
    let _end = res.end; 
    res.end = function end(chunk, encoding) { 
    ... 
    return _end.call(res, chunk, encoding); 
    }; 
    next(); 
}); 

Dieser folgenden Typoskript Fehler zurück:

error TS2322: Type '(chunk: any, encoding: any) => any' is not assignable to type '{(): void; (buffer: Buffer, cb?: Function): void; (str: string, cb?: Function): void; (str: stri...'.

in @types/node/index.d.tsend Methode wie folgt beschrieben wird:

end(): void; 
end(buffer: Buffer, cb?: Function): void; 
end(str: string, cb?: Function): void; 
end(str: string, encoding?: string, cb?: Function): void; 
end(data?: any, encoding?: string): void; 

Was wäre der richtige Typ, um diesen Fehler zu beheben?

+0

Mögliches Duplikat von [Korrekter Weg zum Überschreiben von Response.end in Typescript?] (Https://stackoverflow.com/questions/48243333/correct-way-to-override-response-end-in-typescript) –

Antwort

1

Von dem, was ich sehe, Sie beabsichtigen, eine der verfügbaren Überlastungen zu nutzen: end(data?: any, encoding?: string): void; Wenn das der Fall ist, müssen Sie nur Ihre Funktion Unterschrift explizit kompatibel machen. Statt

// ... 
res.end = function end(chunk, encoding) { 
// ... 

Verwendung

// ... 
res.end = function end(chunk?:any, encoding?:string) { 
// ... 

Und stellen Sie sicher, dass Sie richtig Eckfällen handhaben, zum Beispiel wo Argumente überhaupt nicht übergeben werden.

+0

Nun, "Chunk?: Any, Encoding?: Any" hat den Trick gemacht. 'chunk?: any, encoding?: string' gab immer noch einen Fehler zurück ... –

Verwandte Themen