Ste*_*fan 5 javascript typescript htmlelements
如何将 a 转换HTMLElement为Node元素。
根据这个答案(/sf/answers/698584561/)a ...An element is one specific type of node但我找不到转换它们的方法。
我特别需要一个 Node 元素,将其传递到 a MutationObserver( https://nitayneeman.com/posts/listening-to-dom-changes-using-mutationobserver-in-angular/ ),并且 aHTMLElement会引发错误。
执行此操作的最佳方法是将您的转换HTMLElement为Node. 有两种方法可以做到这一点。首先是as语法。
let myNode = theHTMLElement as Node;
Run Code Online (Sandbox Code Playgroud)
您还可以使用<>语法。
let myNode = <Node>theHTMLElement;
Run Code Online (Sandbox Code Playgroud)
注意:这会在 TypeScript 编译时更改类型,但不会神奇地为您提供 .js 的 JS 方法和属性Node。
它本质上允许您在知道可以的情况下绕过类型安全。如果类型不兼容,TypeScript 会尽力警告您,但如果您不小心,仍然可能会引入错误。
TypeScript 只为已经存在的对象提供类型定义,它不能修改对象的性质。所以,你的问题是关于 javascript 而不是关于 typescript。
\n\n在lib.dom.d.ts(Angular 使用的类型定义库)内部,MutationObserver\xc2\xa0object 的定义不太正确:
interface MutationObserver {\n disconnect(): void;\n observe(target: Node, options: MutationObserverInit): void;\n takeRecords(): MutationRecord[];\n}\nRun Code Online (Sandbox Code Playgroud)\n\n其中target定义为Node元素。
HTMLElement是在同一个文件中定义的,并且它Element扩展了Node. 因此,HTMLElement适合目标属性应该不会有任何问题。
更好的类型定义是:
\n\nobserve<T extends Node>(target: T, options: MutationObserverInit): void;\nRun Code Online (Sandbox Code Playgroud)\n\n但由于尚未提供此类型定义,因此如果您告诉编译器只需在element as Node回调内传递就完全没问题,那就更好了。
| 归档时间: |
|
| 查看次数: |
16123 次 |
| 最近记录: |