👏
React,typeScript環境でuseRefを使用した際の型エラー解消
事象
Next(React), typeScript環境でuseRefを使ったところ下記のようなエラーが発生したので、解消法を紹介します。
Property 'value' does not exist on type 'never'.ts(2339)
今回は下記はフォームを作成していたところ上記エラーメッセージが出現しました。
動作的には正しく動いていて、画面では値を表示出来るものの、typeScript側でエラーになってしまってました。
上記とは違いますが、コードのイメージとしてはこんな感じ。
inputに入力したデータをuseRefで取得して、ボタン押下時にログに出そうとしていました。
import { useRef } from "react";
const Form = () => {
const ref = useRef(null)
const submitHandler = (e: React.ChangeEvent) => {
e.preventDefault()
console.log(ref.current?.value)
};
return(
<form onSubmit={submitHandler}>
<input type="text" ref={ref}/>
<button type="submit">ボタン</button>
</form>
);
}
export default Form;
useRefに型を設定する必要があったようなので、
const ref = useRef<HTMLElement>(null)
と定義してみました。
これではまだエラーが消えず、今度は「HTMLElementに'value'なんてないぞ」というようなエラーになりました。
Property 'value' does not exist on type 'HTMLElement'.ts(2339)
解決策
調べてみると、型の設定をする際にはざっくりと<HTMLElement>として定義するのではなく、
細かくどのElementから持って来ているのかを型として記載する必要がありました。
今回は、inputを指定する必要があったので、
const ref = useRef<HTMLInputElement>(null)
としました。これでエラーメッセージが消えてくれました。
ここまで読んでくださり、ありがとうございました。
参考にしたサイト
Discussion