Express.js使用Typescript路由

chr*_*ber 3 node.js express typescript typescript1.6

我想将Express.js与Typescript 一起使用以指定更具模块化/ OO的代码。

我想通过实现IRoute接口,然后将新的Route添加到app.use()来实现Route / Controller。

我面临的问题是每个操作(get,post,put,delete)本身都会返回IRoute接口,但我不确定要返回什么。返回 return <IRoute> this;操作无效。

打字稿编译器响应并显示以下错误消息:

MessurmentsController类错误地实现了IRoute接口。属性类型是all不兼容的。类型(req: Request, res: Response, next: Function) => void不可分配给type (...handler: RequestHandler[]): IRoute。类型参数reqhandler有incomatible。类型Request不可分配给type RequestHandler

/// <reference path="../../../typings/tsd.d.ts" />

import {IRoute, Request,Response}  from 'express';


export class MeasurementsController implements IRoute {
	path: string;
	stack: any;
	
	constructor(){
		this.path = "/api/measurements"
	}
	
	
	all(req: Request, res: Response, next: Function){
		res.send('');
        //return <IRoute> this;
	}
	
	get(req: Request, res: Response, next: Function){
		res.send('');
	}
	
	post(req: Request, res: Response, next: Function){
		res.send('');
	}
	
	put(req: Request, res: Response, next: Function){
		res.send('');
	}
	
	delete(req: Request, res: Response, next: Function){
		res.send('');
	}
	patch(req: Request, res: Response, next: Function){
		res.send('');
	}
	options(req: Request, res: Response, next: Function){
		res.send('');
	}
	head(req: Request, res: Response, next: Function){
		res.send('');
	}
}
Run Code Online (Sandbox Code Playgroud)

d.ts中的Route定义为

    module e {
        interface IRoute {
            path: string;
            stack: any;
            all(...handler: RequestHandler[]): IRoute;
            get(...handler: RequestHandler[]): IRoute;
            post(...handler: RequestHandler[]): IRoute;
            put(...handler: RequestHandler[]): IRoute;
            delete(...handler: RequestHandler[]): IRoute;
            patch(...handler: RequestHandler[]): IRoute;
            options(...handler: RequestHandler[]): IRoute;
            head(...handler: RequestHandler[]): IRoute;
        }
Run Code Online (Sandbox Code Playgroud)

我需要进行一次手术以恢复正常工作的想法吗?

chr*_*ber 5

最终出现了一个解决方案:

routing-controllers允许使用方法作为处理请求的方法来创建控制器类。您可以将路由控制器与express.js或koa.js一起使用。 https://github.com/pleerock/routing-controllers