如何导出现有Typescript声明模块的内部成员

时间:2017-01-11 14:19:50

标签: typescript

让我们说我有一个声明文件,用于描述导出具有多个成员的对象的节点模块的形状。此文件存在于foo/index.d.ts,如下所示:

interface Foo {
  bar: () => void;
  // ... more members here
}


declare var Foo: Foo;
export = Foo;

有了这个,我可以在编译时正常地要求和使用模块:

import * as Foo from 'foo';
Foo.bar();

但是,我现在也希望能够这样做:

import * as bar from 'foo/bar';
bar();

我已尝试过声明文件路径,模块,命名空间和上下文的所有可能组合,但我无法正常工作。最明显,最直观的方法是在foo/bar/index.d.ts创建一个文件:

import * as Foo from '..';
export = Foo.bar;

但这样做会导致错误:'Foo' only refers to a type, but is being used as a namespace here.

如何创建定义导出外部和内部成员的模块的声明文件?

编辑:尝试按@cevek的建议使用declare module,但这会引发错误"找不到名称空间Foo":

declare module "foo/bar" {
  var bar: Foo.bar;
  export = bar;
}

1 个答案:

答案 0 :(得分:0)

您可以使用模块声明

//foo.d.ts
    interface Foo {}
    interface Bar {}

    declare module 'foo' {
        export default Foo
    }

    declare module 'foo/bar'{
        export default Bar
    }

从其他地方使用

import * as Foo from 'foo';
import * as Bar from 'foo/bar';