TypeScriptで一回unknwonに変換するのはどういう意味があるのか

nove-b October 27, 2024
Source
as unknown as ? as soon asは「できるだけ早く」で、中学生の時、喉が擦り切れるほどむやみに連呼していた記憶がある。 おかげさまで、この意味を30歳超えても忘れていない。 だが、as unknown asは知らなかった。 そもそもunknownってなに? unknownは型が分からないときに使用するらしい。 つまりそれってanyではと思うし、間違っていない。 その両方ともどのような値も代入することができる。 サバイバルTypeScriptからの引用。 違いは型チェックをするしないかという点らしい。 つまりanyを使用するとはコンパイル時には気が付けないのに対し、unknown型は一貫してTypeScriptがプロパティ、メソッドへのアクセスを行わせない。結果的にコンパイルを実行することができず、意図しないランタイム時のエラーを防止することができる。 例えば、下記コードでは'unknownValue' is of type 'unknown'.というエラーが出る。 anyよりも厳格な型らしいので、unknownを使ったほうが良いのだろうか。 unknownは理解した、ではas unknown asはなに ちなみにこの構文(as ○○ as)のことを型アサーションっていうらしい。 > TypeScriptには、型推論を上書きする機能があります。その機能を型アサーション (type > assertion)と言います。 > > TypeScriptコンパイラーはコードをヒントに型を推論してくれます。その型推論は非常に知的ですが、場合によってはコンパイラーよりもプログラマーがより正確な型を知っている場合があります。そのような場合は、型アサーションを用いるとコンパイラーに型を伝えることができます。型アサーションはコンパイラに「私を信じて!私のほうが型に詳しいから」と伝えるようなものです。 ただ、型アサーションを使用してもコンパイルエラーが出るときがある。 例えば、 これは というエラーが出る。 これはnumber型をstring型にするのは間違いです。お互いの型に共通する部分が少なすぎるからですというエラーらしい。 TypeScriptは無茶な上書きはできないように設計されているのだが、それでも自分の書いた型アサーションが正しいという場合は このように一度unknown型を経由することエラーを出さずに型推論を上書きすることができる。 サバイバルTypeScriptの警告 最後に参考にしたサバイバルTypeScriptに教訓が載っていたのでそのまま載せておく。 大いなる力には大いなる責任が伴う 型アサーションには、コンパイラーの型推論を上書きする強力さがあります。そのため、プログラマーは型アサーションによってバグを産まないように十分注意する必要があります。型に関することはできるだけ、コンパイラーの型推論に頼ったほうが安全なので、型アサーションは、やむを得ない場合にのみ使うべきです。 型アサーションを使う必要が出てきたら、それよりも先に、型ガードやユーザー定義型ガードで解決できないか検討してみるとよいでしょう。

Discussion in the ATmosphere

Loading comments...