- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
Visual Studio,提示 document.body
是一个 HTMLElement
,而不是 HTMLBodyElement
,这是为什么呢? - 我没有找到答案。
class Test {
documentBody1: HTMLBodyElement;
documentBody2: HTMLElement;
constructor(){
this.documentBody1 = document.body; //wrong
this.documentBody2 = document.body; //right
}
}
最佳答案
property document.body
的类型是 HTMLElement
,但在大多数情况下它指的是一个对象,它实际上是一个 HTMLBodyElement
.
那么为什么 document.body
不是类型 HTMLBodyElement
呢?因为在某些文件中,它可能指的是一个HTMLFrameSetElement
。 HTMLElement
是 HTMLBodyElement
和 HTMLFrameSetElement
的公共(public)父类(super class)型。
更多信息在 document.body
在规范中。
在评论中,icl7126 asks一个好问题:
I'm wondering why is there no null? It will be null when document is not loaded yet...
我的猜测是实用主义。在 TypeScript 社区(以及项目本身)中有很多实用主义而不是理想主义。由于人们几乎从不在 body
出现之前运行与 DOM 交互的代码,而不是让每个人在使用 时添加一个几乎肯定是不必要的守卫或非空断言code>document.body
,定义 TypeScript 类型的人使用 HTMLElement
而不是 HTMLElement |空
。它并不完全正确,但它是正确和有用之间的平衡。
关于typescript - 为什么 document.body 不是 HTMLBodyElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35297129/
我想最终遍历 body 中的所有节点(尚未实现)并从每个节点获取背景和文本颜色。但是,我得到 Uncaught TypeError: Object # has no method 'css' .它发生
Visual Studio,提示 document.body 是一个 HTMLElement,而不是 HTMLBodyElement,这是为什么呢? - 我没有找到答案。 class Test {
我是一名优秀的程序员,十分优秀!