2015-07-07 1 views
2

Я пытаюсь расширить интерфейс expressjs приложений с использованием декларации сливаясь, как описано в экспресс-определения типарасширения экспресс-интерфейс приложения

declare module Express { 

    // These open interfaces may be extended in an application-specific manner via declaration merging. 
    // See for example method-override.d.ts (https://github.com/borisyankov/DefinitelyTyped/blob/master/method-override/method-override.d.ts) 
    export interface Request { } 
    export interface Response { } 
    export interface Application { } 
} 

Итак, мои app.ts выглядит следующим образом:

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

declare module Express { 
    export interface Application { 
     testA: string; 
    } 
    export interface Request { 
     testR: string; 
    } 
} 

import express = require('express'); 

var app = express(); 

app.testA = "why not?"; 
app.use(function (req, res, next) { 
    req.testR = "xxx"; 
}) 

Я получаю ошибки:

«Собственность testA не существует по типу Express»

"Собственность testR не существует по типу Запрос"

Любые подсказки?

+0

Вы пытались переместить 'declare module Express' в другой файл' * .d.ts'? По какой-то причине это может помочь. – zlumer

ответ

1

Поскольку вы используете модули, слияние декларации здесь не произойдет. В app.ts нет модуля Express, чтобы объединиться, поэтому он делает совершенно отдельное определение модуля. Вам нужно переместить код ...

declare module Express { 
    export interface Application { 
     testA: string; 
    } 
    export interface Request { 
     testR: string; 
    } 
} 

... в .d.ts файл, так что интерфейсы объединяются с теми, в express.d.ts.

 Смежные вопросы

  • Нет связанных вопросов^_^