【问题标题】:Typescript - How to avoid compilation error from undeclared objectsTypescript - 如何避免未声明对象的编译错误
【发布时间】:2017-10-21 10:17:59
【问题描述】:

假设我在页面中插入了一个外部 javascript,并将一些内容导出到外部范围(即将它们绑定到窗口)。

我想在我的打字稿项目中将其中一些属性称为:

UndeclaredExportedProperty.aFunction()

但是打字稿不允许我编译那个>

我不想通过一种复杂的方式来声明模块的整个接口,因为我不知道它,坦率地说我不关心它。它只是一个我必须调用一次的模块,并且“相信”在我进行调用时它已加载并包含正确的元素(它不重要,因此不调用它不会让世界着火)。

使用 typescript 最简单的方法是什么?

编辑以响应标记为重复:

虽然该问题的答案确实解决了我的问题,但问题是不同的(例如堆栈无法将其作为重复的建议找到),我觉得我正在尝试做的 Pokus 答案是比该问题的答案更直接和通用的解决方案

话虽如此,如果管理员觉得这仍然是重复的问题或简单的问题,请随时删除/关闭,因为我已经得到了答案。就我个人而言,我会保持原样,因为下一个通过谷歌搜索的人可能会更容易通过这种方式找到答案。

【问题讨论】:

标签: javascript typescript webpack ecmascript-6 ecmascript-2016


【解决方案1】:

您应该为此使用 declare 关键字:

declare var UndeclaredExportedProperty: any;

官方文档在这里说明了这一点: https://www.typescriptlang.org/docs/handbook/modules.html 在部分 使用其他 JavaScript 库

【讨论】:

  • 哦,这似乎也有效,并且比我找到的答案更直观,所以我想我会将其标记为正确。非常感谢:)
  • 酷,如果你觉得有帮助,请标记为正确答案:)
【解决方案2】:

试试

(window as any).UndeclaredExportedProperty.aFunction()

这将告诉编译器暂时将Window 实例视为无类型,并允许您对其执行任何操作。

【讨论】:

    【解决方案3】:

    好的,这个问题显然在这里得到了回答:

    How do you explicitly set a new property on `window` in TypeScript?

    我不能将我自己的帖子标记为重复,所以我将把它留在这里并关闭线程,也许下一个谷歌搜索的可怜草皮而不点击该链接会偶然发现这个。

    显然,可以使用数组选择运算符 (o.o?) 查询对象(例如窗口)的属性,因此您可以这样做:

    window["UndeclaredExportedProperty"].aFunction()
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多