如何使用从另一个.d.ts文件导出的类型来扩充typescript接口?

时间:2016-04-16 16:47:07

标签: typescript typescript1.8

这是我的用例:

我们的Promise库周围有一个非常轻量级的抽象,因为我们现在因各种原因已经多次更改了它,我们不希望在整个应用程序中更改代码。

我想在express.Request实例中添加一个中间件,我可以通过扩充界面轻松完成,如下所示:

declare namespace Express {
    export interface Request {
        loginP(user: any): void;
    }
}

将它放在一个.d.ts文件中,一切都很好,这太棒了。

但是。这是我的麻烦;在我的抽象中,我重新导出我们正在使用的promise库的接口,以便我们可以在整个应用程序中使用它并进行良好的类型检查,而不需要知道它来自哪里:

import * as bluebird from 'bluebird';

export {bluebird as PType};

这非常有效;但是,仅当.d.ts文件不导出或导入任何内容时,扩充接口才有效,因此当我尝试让loginP返回PType<void>时,实际返回的类型,扩充突然停止工作:

import {PType} from '../lib/Promise';

declare namespace Express {
    export interface Request {
        loginP(user: any): PType<void>;
    }
}

(使用上面的代码,在界面的任何地方都找不到成员loginP)。如果我删除import {PType}行,一切正常 - 除了我无法返回我需要的类型。

有什么想法吗?我正在使用带有tsconfig文件的typescript 1.8.9,使用tsc -p .

构建

1 个答案:

答案 0 :(得分:3)

我认为您的问题是您正在尝试执行模块合并(只要您的代码中有导出/导入语句 - 模块就会变为外部)。即使它没有直接支持 - 你仍然可以这样做。

下面我发布直接从typescript handbook复制的代码,作为如何执行此操作的示例:

function Name{
\\your code ..
}

希望这有帮助。