让我们说我有一个声明文件,用于描述导出具有多个成员的对象的节点模块的形状。此文件存在于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;
}
答案 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';