展开窗口对象

时间:2016-02-06 05:16:10

标签: typescript

我正在使用Typescript处理Angular和Meteor。 当我设置一个集合时,我通常会声明一个全局变量(这就是为什么流星会这样做):

Invoices = new Mongo.Collection( 'invoices' );

现在我想将Invoices添加到我的typescript自定义定义中,以便代码的intellisense不会跳过它。 但是,Invoices是窗口对象的一部分,我无法复制模块声明。

只需将此添加到我的custom.d.ts文件中,就可以在我的代码中使用intellisense

var Invoices: Mongo.Collection<any>;

但是代码不喜欢var。它说我需要使用declare模块。 但是,我无法重新声明模块Window。

所以我有点不知道如何以正确的方式做到这一点。

4 个答案:

答案 0 :(得分:3)

除了Zeeshan的回答,TypeScript中的接口也是自我合并的。另一种定义此变量的方法是使用

将其添加到Window接口
interface Window{
    Invoices: Mongo.Collection<any>;
}

然后可以与

一起使用
window.Invoices = /* your collection */;

这里需要注意的一点是,在上面的示例中需要window,其中使用Zeeshan的提案并非如此。使用哪种方法取决于您对代码的明确程度的偏好。我同意使用declare var可能更方便,但它也可以让开发人员搜索变量定义的范围。

我只是提出这个,因为它可能是一种有价值的替代方法,取决于您对显性的偏好。

答案 1 :(得分:2)

是的declare var Invoices: Mongo.Collection<any>;

Good Tutorial for More Understanding

快乐帮助!

答案 2 :(得分:2)

确保界面名称为Window(W -capital),在声明中需要定义小窗口。

interface Window{
    Invoices: Mongo.Collection<any>;
}

// somewhere in class
private myvar = window.invoice

答案 3 :(得分:0)

似乎工作正常的一件事是: declare var Invoices: Mongo.Collection<any>;