useStateの型、Dispatch<SetStateAction<T>> についてとジェネリック型
nove-b
January 11, 2025
useStateの型
useStateの状態管理関数をPropsで渡すとき、受け取る側は
という方で受け取ることになる。
ジェネリクスのメリットがいまいち
関係ないけどずっと気になっていた「ジェネリクスのメリットがいまいちピンとこない件」について、ついでに調べてみることにした。
例えば、
という関数が存在した時、
こんな感じにまとめたくなる。
これをジェネリック型にすると、
こんな感じになる。
型ガードが必要
同じように感じるけど、returnTextOrNumberの場合は、
stringとnumberのどちらが返ってくる確定していないので、コンパイルエラーが出る。
実行するためには
のように型ガードする必要がある。
コンパイラーをだませる
bは0なのでlengthが存在しないが、as stringで強制的に文字列とコンパイラーと認識させられる。
これはコード的負の遺産になる。
ジェネリック型は堅牢でコード量が少ない
対照的にジェネリック型であるreturnTextOrNumberGeneric の場合は、
関数実行時に入出力共に型を指定し確定できるので、コンパイルエラーがでない。
また
強制的に異なる方でコンパイラーを納得させようとしても不可能になり、堅牢制が向上した。
実際に整理してみるとジェネリック型の恩恵がよくわかった。
Discussion in the ATmosphere