HTMLElement 类型的值不可调用
Posted
技术标签:
【中文标题】HTMLElement 类型的值不可调用【英文标题】:Value of type HTMLElement is not callable 【发布时间】:2013-04-18 01:31:22 【问题描述】:我在将其中一条 javascript 行转换为 TypeScript 时遇到了一点问题。
此行用于在 ID 为 containerId
的容器上创建类型为 widgetName
的小部件。 widgetName
是一个字符串:
$('#' + containerId)[widgetName](options)
示例: 在 id 为 example
的 div 上创建一个没有选项的手风琴小部件$('#example')["accordion"]();
// which could be rewritten as:
$('#example').accordion();
虽然 JavaScript 有效,但 TypeScript 在第一行抛出错误:
谁能帮助我如何写这个声明?我不能将htmlElement
转换为JQueryStatic
。提前致谢!
【问题讨论】:
如果widgetName
是一个整数,我可以看到这个错误; [widgetName]
将在 jQuery 集合中的该位置检索 HTMLElement
,而 (options)
会抛出错误……但这不是有效的 JavaScript,更不用说 TypeScript。
@Matt widgetName
被键入为字符串,$(..)[string]
的结果是HTMLElement
,这导致了问题:)
...那么这怎么可能?你不能执行HTMLElement
,如果你想创建一个,你必须使用document.createElement
...?
问题是 TypeScript 假设它是一个HTMLElement
。事实上,我打电话给$().accordion(options)
。更新了我的问题以明确这一点。
【参考方案1】:
最简单的解决方案:
(<any>$('#example'))["accordion"]();
【讨论】:
谢谢,但我已经在使用 jQuery UI 的定义文件,我需要保留当前的语法,因为它提供了灵活性。 @Anzeo 我以为你在另一行得到错误 :) 我倾向于写“上面的行给出一个错误”或“下面的行给出一个错误”以帮助更快地理解。 啊,是的,我编辑了我的问题,这就是为什么不清楚。我已经更新了它以供将来参考:)【参考方案2】:您是否使用最新版本的确定类型 (https://github.com/borisyankov/DefinitelyTyped/blob/master/jquery/jquery.d.ts) 的 jquery 定义文件?
看起来这在你的情况下应该可以正常工作(第 726/727 行)-
[x: string]: any;
[x: number]: HTMLElement;
旧版本的 d.ts 定义不正确:
[x: string]: HTMLElement; // *WRONG*
[x: number]: HTMLElement;
(更新:经过测试,我发现我有同样的错误。更新到上面列出的 d.ts 可以修复它)。
【讨论】:
谢谢,我正在考虑升级它,但我们目前仍在使用 jQuery 1.7.1,我担心会有重大变化?我马上试试这个! 我不知道。不过,您可以自己轻松解决问题。不确定 d.ts 中的行号是什么,但只需在 JQuery 界面上搜索[x: string]: HTMLElement;
并将其修改为 [x: string]: any;
- 我认为这不会破坏其他任何内容。以上是关于HTMLElement 类型的值不可调用的主要内容,如果未能解决你的问题,请参考以下文章
Javascript Puppeteer 错误:节点不可点击或不是 HTMLElement
TypeScript——不能将类型“HTMLElement | null”分配给类型“HTMLElement”
TypeScript——不能将类型“HTMLElement | null”分配给类型“HTMLElement”
TypeScript——不能将类型“HTMLElement | null”分配给类型“HTMLElement”