みなさんこんにちは、かじりです。今回はobjectのtypeguardについてです。
概要です。以前はobjectの型判定をするtypeというkeyを持たせていたが、classにすることによりinstanceofで条件分岐できるようになった。
以下はコード例です
before
type Obj = {
type: 'a'
} | {
type: 'b'
}
const obj: Obj = {type: 'a'}
if (obj.type === 'a') {
...
} else if (obj.type === 'b') {
...
} else {
...
}
after
class%20A%20%7B%7D%0A%0Aclass%20B%20%7B%7D%0A%0Aconst%20obj%20%3D%20new%20A%28%29%0A%0Aif%20%28obj%20instanceof%20A%29%20%7B%0A%20%20%20%20...%0A%7D%20else%20if%20%28obj%20instanceof%20B%29%20%7B%0A%20%20%20%20...%0A%7D%20else%20%7B%0A%20%20%20%20...%0A%7D%0A
実験用のcodesandboxです
https://codesandbox.io/s/workflow-type-guard-umxjj?file=/src/App.tsx
調査過程
自分がやりたいことはtypeguardという。typeofまたはinstanceofを使用する。
https://stackoverflow.com/a/35546468
自分が使おうと思ってよく断念するisによる型の絞り込みはユーザー定義型ガードという。
https://blog.uhy.ooo/entry/2021-04-09/typescript-is-any-as/
instanceofがよさそうだなー
でもhooksで使いたいんだよなー