我试图在粒度级别上了解在使用TypeScript行(如
)时使用Web浏览器的实际DOM实现的阶段let element = document.querySelector('#someclass');
在Javascript中document
在html标记范围内使用时直接引用浏览器实现。
在TypeScript document
中,lib.d.ts由
declare var document: Document;
如果上面的文档对象的调用是浏览器实现',那么我对如何考虑最后一个声明感兴趣。
反过来,Document
界面扩展了其他界面:
interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEvent, ParentNode, DocumentOrShadowRoot {
...
}
Node
向下延伸到EventTarget接口:
interface EventTarget {
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
dispatchEvent(evt: Event): boolean;
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
}
现在,我对如何 TypeScript获取对浏览器的实际DOM文档实现的访问非常感兴趣,浏览器通过自己的实现提供原始DOM对象。
如果我在这种情况下完全忽略了TypeScript概念的接口,我也可以在这方面详细阐述。但我的主要问题涉及 TypeScript如何从浏览器中获取原始DOM文档对象。
答案 0 :(得分:0)
每个浏览器都实现自己的规范实现。规范针对每种dom方法应该做什么给出了一些精确的想法。
例如,Element.closest
。
最接近的(选择器)方法在被调用时必须执行以下步骤:
- 让它成为解析选择器中的选择器的结果。 [SELECTORS4]
- 如果s失败,则抛出“ SyntaxError” DOMException。
- 让元素成为 相反,上下文对象的包容祖先是元素 树顺序。
- 对于元素中的每个元素,如果匹配选择器 一个元素,使用s,element和:scope元素上下文对象, 返回成功,返回元素。 [SELECTORS4]
- 返回null。
Firefox,Chrome,IE等都编写了自己的实现,但是方法签名是标准的。该标准归某个标准委员会或公司所有,这变得很复杂。这也是Google诉Oracle诉讼的核心。
反正
TS定义文件是从Microsoft Edge的内部自动生成的。因此,这并不是真实浏览器的准确描绘。
返回Element.closest。它在规范中,但IE11并未实现。知道了。
这是Github上的一个未解决的问题,要求TS更好地指出浏览器之间的差异:https://github.com/Microsoft/TypeScript/issues/19183。随时对其+1即可。