Tc_*_*Tc_ 5 strong-typing typescript
Visual Studio,提示document.body是HTMLElement,而不是HTMLBodyElement,为什么呢?-我没有运气来寻找答案。
class Test {
documentBody1: HTMLBodyElement;
documentBody2: HTMLElement;
constructor(){
this.documentBody1 = document.body; //wrong
this.documentBody2 = document.body; //right
}
}
Run Code Online (Sandbox Code Playgroud)
属性 的类型document.body是HTMLElement,但在大多数情况下,它指的是一个实际上是HTMLBodyElement.
那么为什么document.body不输入HTMLBodyElement呢?因为在某些文档中,它可能会引用一个HTMLFrameSetElement. HTMLElement是HTMLBodyElementand的共同超类型HTMLFrameSetElement。
更多在document.body规范中。
在评论中,icl7126 问了个好问题:
我想知道为什么没有空值?当文档尚未加载时它将为空...
我的猜测是实用主义。在 TypeScript 社区(以及项目本身)中有很多实用主义而不是理想主义。由于人们在存在之前几乎从不运行与 DOM 交互的代码body,而不是让每个人在使用 时添加几乎肯定不必要的保护或非空断言document.body,定义该 TypeScript 类型的人使用HTMLElement而不是HTMLElement | null. 这不是完全正确的,但它是正确和有用之间的平衡。
| 归档时间: |
|
| 查看次数: |
1834 次 |
| 最近记录: |