我想使用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
。参数类型req
和handler
不兼容。类型Request
不可分配给 typeRequestHandler
。
/// <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('');
}
}
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;
}
知道我需要在操作中返回什么才能使其正常工作吗?