TypeScript的Document界面和浏览器的DOM实现

时间:2018-03-08 15:57:57

标签: javascript typescript dom

我试图在粒度级别上了解在使用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文档对象。

1 个答案:

答案 0 :(得分:0)

每个浏览器都实现自己的规范实现。规范针对每种dom方法应该做什么给出了一些精确的想法。

例如,Element.closest

  

最接近的(选择器)方法在被调用时必须执行以下步骤:

     
      
  1. 让它成为解析选择器中的选择器的结果。 [SELECTORS4]
  2.   
  3. 如果s失败,则抛出“ SyntaxError” DOMException。
  4.   
  5. 让元素成为   相反,上下文对象的包容祖先是元素   树顺序。
  6.   
  7. 对于元素中的每个元素,如果匹配选择器   一个元素,使用s,element和:scope元素上下文对象,   返回成功,返回元素。 [SELECTORS4]
  8.   
  9. 返回null。
  10.   

Firefox,Chrome,IE等都编写了自己的实现,但是方法签名是标准的。该标准归某个标准委员会或公司所有,这变得很复杂。这也是Google诉Oracle诉讼的核心。

反正

TS定义文件是从Microsoft Edge的内部自动生成的。因此,这并不是真实浏览器的准确描绘。

返回Element.closest。它在规范中,但IE11并未实现。知道了。

这是Github上的一个未解决的问题,要求TS更好地指出浏览器之间的差异:https://github.com/Microsoft/TypeScript/issues/19183。随时对其+1即可。