在打字稿中使用Express中的callback函数数组

我试图在打字稿中重新创build快速路由示例

我有…

/// <reference path='Scripts/typings/express/express.d.ts' /> import express = require('express'); var app = express(); var cb0: express.RequestHandler = function (req, res, next) { console.log('CB0'); next(); } var cb1: express.RequestHandler = function (req, res, next) { console.log('CB1'); next(); } var cb2: express.RequestHandler = function (req, res) { res.send('Hello from C!'); } var arr: express.RequestHandler[] = [cb0, cb1, cb2]; app.get('/example/c', arr); 

typecript编译器在我的第一个错误是'/example/c''/example/c' Argument of type 'string' is not assignable to parameter of type 'RegExp' …奇数,因为在express.d.ts函数被定义作为允许一个string, 一个正则expression式…但是,好吧,我把它改为new RegExp('/example/c')

然后它抛出错误Argument of type 'RequestHandler[]' is not assignable to parameter of type 'RequestHandler'. 对我。 也奇怪,因为express.d.ts文件具有定义为允许数组的方法。

在这里打字稿很新,这些是一些神秘的错误信息…

改变你的代码片段的最后一行,你应该没问题:

 app.get('/example/c', cb0, cb1, cb2); 

你不能将一个RequestHandler数组传递给第二个参数….它是Typescript中一个特殊types的参数,叫做“rest”参数,类似于C#中的“params”。