为啥我们在打字稿中使用 HTMLInputElement?

Posted

技术标签:

【中文标题】为啥我们在打字稿中使用 HTMLInputElement?【英文标题】:why we are using HTMLInputElement in typescript?为什么我们在打字稿中使用 HTMLInputElement? 【发布时间】:2019-02-18 21:40:59 【问题描述】:

我们为什么使用:

(document.getElementById("ipv") as htmlInputElement).value;

代替:

document.getElementById("ipv").value;

?

【问题讨论】:

getElementById 返回 Element ... Element 没有 value This answer 应该澄清一下。它的要点是打字稿无法知道该元素是HTMLInputElement,而不是通用的HTMLElement,除非你告诉它。 HTMLElement 没有 value 属性,但 HTMLInputElement 有,因此需要将其强制转换为该类型。 【参考方案1】:

document.getElementById() 将无法返回特定元素类型,因为它事先不知道该元素将是什么,因此您需要在事后将结果转换为 HTMLInputElement,以便 value可以识别该类的属性。

【讨论】:

【参考方案2】:

函数getElementById返回HTMLElement类型的对象。

来自 lib.dom.d.ts:

 /**
 * Returns a reference to the first object with the specified value of the ID or NAME attribute.
 * @param elementId String that specifies the ID value. Case-insensitive.
 */
getElementById(elementId: string): HTMLElement | null;

HTMLElement 类型是 DOM 的其他标签类型的基本类型。 例如,HTMLInputElement 类型扩展了 HTMLElement 并具有 value 类型 HTMLElement 没有的属性。

来自 lib.dom.d.ts:

interface HTMLInputElement extends HTMLElement 
...
/**
 * Returns the value of the data at the cursor's current position.
 */
value: string;
...

由于HTMLInputElement 扩展了HTMLElement,下一行可以编译:

const inputTag = document.getElementById('name-input') as HTMLInputElement;
const value = inputTag.value;

【讨论】:

以上是关于为啥我们在打字稿中使用 HTMLInputElement?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在打字稿中访问另一个类中的私有变量吗

我们可以在打字稿中访问另一个类中的私有变量吗

打字稿中@符号的含义--Angular 2

在笑话和打字稿中模拟交叉点观察者

如何在打字稿中避免这种符号“| undefined”?

在打字稿中向对象数组插入新值