2016-05-04 3 views
4

Ich möchte express-boom für Express mit TypeScript verwenden. Es fehlen die Typisierungen, deshalb würde ich gerne meine eigenen schreiben. Mach es einfach kompilieren ist trivial.Wie schreibt man TypScript-Definition für eine Middleware, die der Antwort eine Eigenschaft hinzufügt?

Diese Middleware ziert die res Objekt mit einer Eigenschaft boom (abgeleitet vom boom module):

var express = require('express'); 
var boom = require('express-boom'); 

var app = express(); 

app.use(boom()); 

app.use(function (req, res) { 
    res.boom.notFound(); // Responsds with a 404 status code 
}); 

Aber mit Typoskript muss ich es werfen, weil weder http.ServerResponse und Express.Response den Boom Eigenschaft haben, natürlich:

return (<any>res).boom.badRequest('bla bla bla'); 

Welcher ist der sauberste Weg? Was sind andere typisierte Middleware, die eine ähnliche Sache machen?

Antwort

2

Es gibt einige andere Express-Middlewares, die Sie als Beispiele verwenden können, z. Method-Override und seine type definitions.

Als ein konkretes Beispiel, wenn Sie diese .boom Eigenschaft der Antwort Objekt hinzufügen möchten, sollten Sie nur eine Typdefinition erstellen müssen (Express-boom.d.ts) enthält:

declare namespace Express { 
    interface Boom { 
     // Add boom's properties in here 
    } 

    export interface Response { 
     boom: Boom 
    } 
} 
+0

Super, es funktioniert. nur ein Ding, und wie fügt man automatisch die [typisierte Methode des Booms] (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/cc3d223a946f661eff871787edeb0fcb8f0db156/boom/boom.d.ts) zur "Boom" -Funktion hinzu? – nkint

+0

Leider glaube ich nicht, dass du kannst. Sie müssen in der Lage sein, den Boom-Namespace als Typ zu verwenden, so dass Sie sich hier darauf beziehen können, und ich denke nicht, dass das möglich ist, afaik. Ich würde gerne hören, wenn Sie einen Weg finden. –

Verwandte Themen