【Typescript】Union Type で “Property does not exist on type”となる場合

スポンサーリンク

Union Typeで”Property does not exist on type”

下記のようなコードで、Union Typeで型指定した場合に、片方の型にしか存在しないプロパティを指定すると”Property does not exist on type”のエラーになってしまいます。

type Inu = {
  wan: 'wan'
}
type Neko = {
  nyan: 'nyan'
}

const hoge = (obj: Inu | Neko) => {
  console.log(obj.wan)
  //Property 'wan' does not exist on type 'Inu | Neko'.   Property 'wan' does not exist on type 'Neko'.
}

この場合は下記のように in を使ってそのオブジェクトが特定のプロパティを持っているか確認してから呼び出すようにすればOKです。

const hoge = (obj: Inu | Neko) => {
  if ('wan' in obj) {
    console.log(obj.wan) //エラーなし
  }
}

割と便利なので覚えておきたいですね。

参考

in 演算子 - JavaScript | MDN
in 演算子は、指定されたプロパティが指定されたオブジェクトにある場合に true を返します。

未経験、異業種からIT業界に転身。フロントエンジニア。主にJavascript(React.js)をつかったWEBアプリ開発にたずさわる。
お問い合わせ、ご相談など → genpsp10@gmail.com

psp7をフォロー
プログラミング
スポンサーリンク
psp7をフォロー
ハトらぼ

コメント