TypeScript声明命名空间的外部模块?

时间:2014-11-10 16:13:08

标签: typescript amd

如果页面使用的是AMD,我会在window上找到一些名为define的旧版js模块,或者// foo/bar.js (function (root, factory) { if (typeof define === "function" && define.amd) { define(factory); } else { root.foo = root.foo || {}; root.foo.bar = factory(); } } (this, function () { return { baz: function () { console.log("qux"); } }; })); 。例如:

import bar = require("foo/bar");

我们正在尝试在未来的网页上开始使用TypeScript,但我在创建能够正确设置外部模块的定义文件时遇到问题。理想情况下,在TypeScript中,我希望能够 // foo/bar.d.ts interface FooBar { baz: () => void; } declare module foo { export var bar: FooBar; } declare module "foo/bar" { export = foo.bar; // Error: Could not find symbol 'bar'. };

在看了jquery.d.ts如何做之后,我想出了:

export = foo.bar

但我在<amd-dependency />上收到错误。目前我还没有声明外部模块并使用{{1}}来处理它。

1 个答案:

答案 0 :(得分:1)

导出的项目可以声明为变量,并带有相应的类型注释。这是一个例子(虽然我不确定你想要导出什么)...

// foo/bar.d.ts
interface FooBar {
    baz: () => void;
}

declare module foo {
    export var bar: FooBar;
}    

declare module "foo/bar" {
    export = fb;
};

declare var fb: FooBar;

这会产生一个全局变量fb并且还支持相同的事物&#34;通过"foo/bar"导入。

如果您不打算将项目放在全局范围内,可以将变量放在模块中,如下所示:

// foo/bar.d.ts
interface FooBar {
    baz: () => void;
}

declare module foo {
    export var bar: FooBar;
}    

declare module "foo/bar" {
    var fb: FooBar;

    export = fb;
}

示例调用代码...

import foo = require("foo/bar");

var x = foo.baz();