【发布时间】:2020-01-11 10:13:52
【问题描述】:
SO 中建议了多种方法来动态导入外部脚本,例如“https://something.com/...js”。问题是 TypeScript 不知道这些属性,因此会出错。
作为 TS 提供的解决方法
declare var someObject
您可以将您从外部来源检索到的对象放入其中。这有效,没有错误。但是,它不适用于
let variable = someObject.property
该属性会出错,因为 TS 不知道您的对象中有什么。
有人解决了吗?
这是我的一些实际代码,它不起作用。错误是
Property createUploadWidget does not exist on type 'Scripts'
interface Scripts {
name: string;
src: string;
}
declare var CloudinaryScripts: Scripts;
CloudinaryScripts =
{name: 'upLoader', src: 'https://widget.cloudinary.com/v2.0/global/all.js'};
export class CloudinaryComponent {
...
private uploadWidget = CloudinaryScripts.createUploadWidget(
{
cloudName: ...
}
另外,这会产生一个很大的错误:
CloudinaryScripts[createUploadWidget]
【问题讨论】:
-
甚至没有接近副本。
-
Stackblitz 无法识别声明。找不到变量:CloudinaryScripts。如果我删除声明,该错误就会消失,但问题会更糟。
-
您对数组的看法是正确的,所以我删除了括号。我一直在尝试许多关于导入的 SO 建议,并留下了一个工件。不过问题没有变化。
-
即使在最初的问题解决之后,这在 Angular 中也不起作用。当组件初始化时,类主体中的 CloudinaryScripts 会引发“未定义”错误。它不明白 var 已为 TypeScript 声明。声明在类的主体中不起作用,它必须在它之上。如果我将声明移到正文中并在构造函数、OnInit 或 AfterViewInit 中对其进行初始化,那么它会因其他问题而失败。似乎没有什么好的解决方法,但如果我找到了,我会将其添加到答案中。
标签: angular typescript