导入使用export =和环境模块声明的接口

时间:2016-05-04 15:18:49

标签: typescript

在Typescript中实现模块时,我相信可以导入使用旧的export =语法导出的各种不同的导出(例如类,接口,变量和枚举)。

但是当我使用环境模块尝试此操作时,编译器(1.8.10)似乎忽略了导入。

声明文件:

Epreuve

主档案

//Module declaration
declare module "foo" {
    interface barProc {
        (): any;
    }

    //Note: if I use the function equivalent to the interface this works ok.    
    function worksOk(): any;

    export = barProc;
}

在这种情况下,编译器抱怨myFunc是一个未知标识符,导入行不会出现在输出js文件中。

注意:在图示的情况下,为了简单起见,我没有在界面中添加任何其他成员。然而,接口的原因是我正在建模的JavaScript库在函数上有成员。

我做错了什么,或者有解决方法吗?

1 个答案:

答案 0 :(得分:1)

barProc是一个接口,因此是一种类型。它不是该类型的变量。您可以将其导出,并在其他地方将其用作类型,但不能将其用作可调用函数,如示例所示。

您的示例大致相当于:

interface barProc {
    (): any;
}

barProc();

就这样说,这显然是错误的。你想要的更像是:

interface barProc {
    (): any;
}

var myFunc: barProc;

myFunc();

返回作为模块,看起来像:

declare module "foo" {
    interface barProc {
        (): any;
    }

    var myFunc: barProc;

    export = myFunc;
}


// Elsewhere:

import myFunc = require("foo");
myFunc();

我认为应该做你想做的事。