我正在使用Typescript处理Angular和Meteor。 当我设置一个集合时,我通常会声明一个全局变量(这就是为什么流星会这样做):
Invoices = new Mongo.Collection( 'invoices' );
现在我想将Invoices
添加到我的typescript自定义定义中,以便代码的intellisense不会跳过它。
但是,Invoices
是窗口对象的一部分,我无法复制模块声明。
只需将此添加到我的custom.d.ts文件中,就可以在我的代码中使用intellisense
var Invoices: Mongo.Collection<any>;
但是代码不喜欢var
。它说我需要使用declare模块。
但是,我无法重新声明模块Window。
所以我有点不知道如何以正确的方式做到这一点。
答案 0 :(得分:3)
除了Zeeshan的回答,TypeScript中的接口也是自我合并的。另一种定义此变量的方法是使用
将其添加到Window
接口
interface Window{
Invoices: Mongo.Collection<any>;
}
然后可以与
一起使用window.Invoices = /* your collection */;
这里需要注意的一点是,在上面的示例中需要window
,其中使用Zeeshan的提案并非如此。使用哪种方法取决于您对代码的明确程度的偏好。我同意使用declare var
可能更方便,但它也可以让开发人员搜索变量定义的范围。
我只是提出这个,因为它可能是一种有价值的替代方法,取决于您对显性的偏好。
答案 1 :(得分:2)
答案 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>;