61884


以下のような`type`があるとします．

[code]

    type Hoge {
      id: number,
      text?: string
    }
    
    type Fuga {
      hoge?: Hoge[]
    }
    
[/code]

このとき`undefined`チェックをしたいのですが，以下のようにしてもエラーが発生します．

[code]

    const fuga: Fuga = {
    
      // properties
    
    }
    
    if(fuga.hoge !== undefined && fuga.hoge[0].text !== undefined){
    
      // some process
    
    }
    
[/code]

エラー内容：

[code]

    Type 'string | undefined' is not assignable to type 'string'.
      Type 'undefined' is not assignable to type 'string'.ts(2322)
    
[/code]

主な環境は以下です．

[code]

    dependencies:
      @types/node: ^12.12.17
      @types/react: ^16.9.16
      @types/react-dom: ^16.9.4
      @babel/core: ^7.7.5
      @babel/preset-env: ^7.7.6
      babel-plugin-transform-react-jsx: ^6.24.1
    
    devDependencies:
      ts-loader: ^6.2.1
      typescript: ^3.7.3
    
[/code]

何か解決策がありましたらよろしくお願いいたします．


CC BY-SA 4.0
2019-12-29T16:58:49.357
61878
2019-12-29T21:43:42.270
29506
question
typescript
typescriptでネストしたオブジェクトのundefinedチェック


hinaloeさん，コメントありがとうございます．  
playground上で試してみましたが，確かにエラーが起きませんでした^^;  
しかし，なぜだか僕のPC上ではエラーが起きてしまっていました．

一応，打開案を発見したので解答として載せます．

打開案としては，`!`(non-null assertion)をつける，もしくは無理やり`string`にキャストするというのが無難かと思いました．

原因ですが，おそらく`HTMLInputElement`を使用していたからではないかと思います．（`HTMLInputElement`のことを質問に載せてませんでした，すみません）  
`querySelectorAll`で取ってきた`HTMLInputElement`の`value`プロパティに順次代入しようとしたところでエラーが起きたので，ちゃんと`null`チェックしろって怒られたのかと思うのですが，詳しいことはわかりませんでした．


CC BY-SA 4.0
2019-12-29T21:43:42.270
61884
2019-12-29T21:43:42.270
29506
61878
answer