2015-05-02 312 views
1
快遞使用的回調函數數組

我試圖重新創建express routing example在打字稿在打字稿

我有...

/// <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); 

第一個錯誤的打字稿編譯器會引發我是'/example/c'Argument of type 'string' is not assignable to parameter of type 'RegExp' ......奇怪,因爲在express.d.ts功能被定義爲允許一個字符串,一個正則表達式......可是,好吧,我將其更改爲new RegExp('/example/c')

然後它會向我拋出錯誤Argument of type 'RequestHandler[]' is not assignable to parameter of type 'RequestHandler'.。也奇怪,因爲express.d.ts文件具有定義爲允許數組的方法。

很新,在這裏打字稿,這些都是一些神祕的錯誤信息......

+0

值得注意的是,'express.d.ts'來自DefinitelyTyped -https://github.com/borisyankov/DefinitelyTyped/blob/master/express/express.d.ts – TranquilMarmot

回答

2

更改您的段將最後一行,你應該罰款:

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

你可以用」將一個RequestHandler數組傳遞給第二個參數....它是Typescript中一個稱爲「rest」參數的特殊類型的參數,類似於C#中的「params」。

+0

謝謝!這很有道理。 – TranquilMarmot