我通过在window
上显式设置属性来为对象设置全局命名空间。
window.MyNamespace = window.MyNamespace || {};
TypeScript在myNamespace
下划线,并抱怨:
属性“myNamespace”不存在于类型为“window”的值中“any”
我可以通过将myNamespace
声明为环境变量并删除window
明确性来使代码工作,但我不想这样做。
declare var MyNamespace: any;
MyNamespace = MyNamespace || {};
我怎样才能保持window
在那里,并让打字很开心呢?
作为附带说明,我觉得TypeScript抱怨特别有趣,因为它告诉我window
是any
类型,它肯定可以包含任何内容。
在另一个StackOverflow问题的答案中找到了答案。
declare global {
interface Window { MyNamespace: any; }
}
window.MyNamespace = window.MyNamespace || {};
基本上,您需要扩展现有的window
界面来告诉它您的新属性。