解決React報錯Property value does not exist on type HTMLElement
總覽
當我們試圖訪問一個類型為HTMLElement的元素上的value屬性時,會產生"Property 'value' does not exist on type 'HTMLElement'"錯誤。為了解決該錯誤,在訪問屬性之前,使用類型斷言將元素類型斷言為HTMLInputElement。

這里有個示例用來展示錯誤是如何發(fā)生的。
// App.tsx
import {useEffect} from 'react';
export default function App() {
useEffect(() => {
const input = document.getElementById('message');
// ?? Property 'value' does not exist on type 'HTMLElement'.ts(2339)
console.log(input?.value);
}, []);
return (
<div>
<input id="message" defaultValue="Initial value" />
</div>
);
}
我們得到錯誤的原因是因為,document.getElementById方法返回的類型為HTMLElement | null ,并且value屬性不存在于HTMLElement類型上。
類型斷言
為了解決該錯誤,使用類型斷言將元素類型斷言為HTMLInputElement(或者HTMLTextAreaElement,如果你使用textarea元素鍵入)。
import {useEffect} from 'react';
export default function App() {
useEffect(() => {
// ? type element as HTMLInputElement
const input = document.getElementById('message') as HTMLInputElement;
console.log(input?.value); // ??? "Initial value"
}, []);
return (
<div>
<input id="message" defaultValue="Initial value" />
</div>
);
}
你也可以在內聯(lián)中使用一個類型斷言,就在訪問值屬性之前。
// App.tsx
import {useEffect} from 'react';
export default function App() {
useEffect(() => {
// ??? inline type assertion
const value = (document.getElementById('message') as HTMLInputElement).value;
console.log(value);
}, []);
return (
<div>
<input id="message" defaultValue="Initial value" />
</div>
);
}
當我們擁有一個值的類型信息,但是TypeScript無從得知時,就會使用類型斷言。
我們有效地告訴TypeScript,input變量存儲了一個HTMLInputElement,不用擔心它。
如果你正在使用一個textarea元素,你將使用HTMLTextAreaElement類型來代替。
聯(lián)合類型
如果你想更精確地控制類型,你可以使用一個聯(lián)合類型來設置類型為HTMLInputElement | null。
// App.tsx
import {useEffect} from 'react';
export default function App() {
useEffect(() => {
// ? type element as HTMLInputElement | null
const input = document.getElementById('message') as HTMLInputElement | null;
console.log(input?.value); // ??? "Initial value"
}, []);
return (
<div>
<input id="message" defaultValue="Initial value" />
</div>
);
}
HTMLInputElement | null類型是正確的,因為如果提供id的元素不存在于DOM中,document.getElementById()方法就會返回一個null值。
需要注意的是,我們使用了可選鏈(?.)操作符來短路運算,如果引用是空值的話(null或者undefined)。
換句話說,如果input變量存儲了一個null值,我們就不會試圖訪問null的屬性,而得到一個運行時錯誤。
類型守衛(wèi)
你也可以使用一個簡單的if語句作為類型守衛(wèi),以確保input變量不存儲一個null值。
// App.tsx
import {useEffect} from 'react';
export default function App() {
useEffect(() => {
const input = document.getElementById('message') as HTMLInputElement | null;
if (input != null) {
console.log(input.value); // ??? "Initial value"
}
}, []);
return (
<div>
<input id="message" defaultValue="Initial value" />
</div>
);
}
TypeScript知道input變量在if塊中的類型是HTMLInputElement,并允許我們直接訪問其value屬性。
在類型斷言中包含null總是一種最佳實踐,因為如果沒有找到所提供的id的元素,getElementById方法將返回null。
原文鏈接:bobbyhadz.com/blog/react-…
以上就是解決React報錯Property value does not exist on type HTMLElement的詳細內容,更多關于React 報錯解決的資料請關注腳本之家其它相關文章!
- 解決React報錯Property does not exist on type 'JSX.IntrinsicElements'
- 解決React報錯Property?'value'?does?not?exist?on?type?EventTarget
- 解決React報錯Cannot assign to 'current' because it is a read-only property
- Can't?perform?a?React?state?update?on?an?unmounted?component報錯解決
- Objects are not valid as a React child報錯解決
- 解決React報錯No duplicate props allowed
- 解決React報錯`value` prop on `input` should not be null
- 解決React報錯Property 'X' does not exist on type 'HTMLElement'
相關文章
解析React?ref?命令代替父子組件的數(shù)據(jù)傳遞問題
這篇文章主要介紹了React?-?ref?命令為什么代替父子組件的數(shù)據(jù)傳遞,使用?ref?之后,我們不需要再進行頻繁的父子傳遞了,子組件也可以有自己的私有狀態(tài)并且不會影響信息的正常需求,這是為什么呢?因為我們使用了?ref?命令的話,ref是可以進行狀態(tài)的傳輸2022-08-08
React通過useContext特性實現(xiàn)組件數(shù)據(jù)傳遞
本文主要介紹了React如何通過useContext特性實現(xiàn)組件數(shù)據(jù)傳遞,文中有相關的代碼示例供大家參考,對我們學習React有一定的幫助,需要的朋友可以參考下2023-06-06
React組件內事件傳參實現(xiàn)tab切換的示例代碼
本篇文章主要介紹了React組件內事件傳參實現(xiàn)tab切換的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
ahooks封裝cookie?localStorage?sessionStorage方法
這篇文章主要為大家介紹了ahooks封裝cookie?localStorage?sessionStorage的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
React中常見的TypeScript定義實戰(zhàn)教程
這篇文章主要介紹了React中常見的TypeScript定義實戰(zhàn),本文介紹了Fiber結構,F(xiàn)iber的生成過程,調和過程,以及 render 和 commit 兩大階段,需要的朋友可以參考下2022-10-10
React如何使用錯誤邊界(Error Boundaries)捕獲組件錯誤
在 React 里,錯誤邊界就像是一個“小衛(wèi)士”,專門負責在組件出現(xiàn)錯誤時挺身而出,避免整個應用因為一個小錯誤就崩潰掉,下面小編就來為大家介紹一下如何利用它捕獲組件錯誤吧2025-03-03

