2013-08-23 5 views
0

express와 같은 것을 사용한다고 가정 해 보겠습니다. 그래서다른 모듈의 인터페이스에 필드를 추가하는 javascript 모듈의 앰비언트 선언

/// <reference path=".../express.d.ts" /> 
import express = require("express"); 

을 추가 한 다음 ExpressServerRequest 같은 형식을 사용할 수 있습니다.

지금까지 그렇게 좋았습니다. 하지만 지금은 예를 들어 connect-flash javascript 모듈을 사용하고 싶습니다. 그러면 ExpressServerRequest에 추가 플래시 기능이 추가됩니다. 나는 connect-flash.d.ts를 정의하는 방법을 고심하고있어, connect-flash 모듈을 가져 왔을 때, req.flash()가 ExpressServerRequest의 인스턴스 상에 정의되어 있지 않으면 정의되어 있지 않다. 이 동작을 TypeScript에서 캡처 할 수 있습니까? 당신이 확장하는 항목이 인터페이스 인 경우

답변

1

, 그들은 타이프 라이터 열려있는, 그래서 당신은 너무 같은 엑스트라를 추가 할 수 있습니다

interface ExpressServerRequest { 
    myAdditionalThing(): void; 
} 

거의 아무것도를 선언하는 방법이 있습니다,이 ISN 그렇다면 귀하의 케이스에 대한 트릭은 기존 ExpressServerRequest를 게시하기 만하면됩니다. Definitely Typed를 확인한 express.d.ts 버전에는 ExpressServerRequest가 인터페이스로 있습니다.

+0

감사합니다. 스티브. 그러나 내가 원했던 것은 connect-flash.d.ts 파일의 인터페이스를 확장하는 것이 었습니다. 이 작업을 수행하고 express.d.ts 및 connect-flash.d.ts를 참조하면 ExpressServerRequest가 호출 코드에서 확장되기를 기대하고있었습니다. 그러나 이것은 발생하지 않는 것처럼 보이기 때문에 호출자에서 인터페이스를 다시 확장해야합니다. 그렇다면 ExpressServerRequest를 확장하기 위해 myAdditionalThing.d.ts 파일을 정의하면 호출자가 두 d.ts 파일 모두를 참조하면 속성을 사용할 수 있지만 myAdditionalThing.d.ts를 참조하지 않으면 보이지 않게됩니다. ? – user2711129

+0

안녕하세요 @ 스티브, 내가 뭘 하려는지에 대한 생각은 현재 TypeScript에서 가능합니다. – user2711129