Cannot read property 'includes' of nullに対処する
filterなどで channel.topic.includes('foo')
を書くと Cannot read property 'includes' of null
のようなエラーが出る
ドキュメントを見ると
Type: ?string
と書かれていて、この
string
の前にある
?
がnullの可能性を表している
あとはテキストチャンネル以外も含まれる .channels.cache
などに対して実行するとボイスチャンネルで違うエラーもでる
Cannot read property 'includes' of undefined
というエラーだが、ボイスチャンネルなどに .topic
はないので起こる
メモ:Discordの仕様で一度でもトピックを変更したことがあるチャンネルだと全て消しても null
ではなく ''
になる
Node.js v14から使えるJavaScriptの新しい構文もある
上の書き方だと長くて書くのが大変なので(特に複数つながる場合とか)、短く書ける構文が追加された
channel.topic?.includes('foo')
のようにnullである可能性がある部分の最後に ?
を書く
こうすると上のと同じような動作をするようになる
これはDiscord.js固有の問題ではなくて、nullの可能性があるときによく出くわすことなので伝統的な回避方法がある
channel.topic && channel.topic.includes('foo')
これは channel.topic
がある場合のみ channel.topic.includes('foo')
を実行するような動作をする