web-dev-qa-db-ja.com

Typescriptでオプションの連鎖を配列で使用するにはどうすればよいですか?

オブジェクトの代わりに配列でオプションのチェーンを使用しようとしていますが、それを行う方法がわかりません:

これが私がmyArray.filter(x => x.testKey === myTestKey)?[0]にしようとしていることです。

しかし、それはそのようなエラーを与えているので、配列でそれを使用する方法。

13
Black Mamba

まあ、正しい構文を理解したとしても、コードは私にはあまり意味がありません。

上記のコードのオプションのチェーンは、myArray.filter(x => x.testKey === myTestKey)の結果がnullではなくundefinedではないことを確認しています(TS出力を確認できます)。しかし、とにかくそれは不可能です。なぜなら、filterメソッドの結果は常にarrayだからです。 JavaScriptは「配列の境界を超えました」をスローしないため、インデックスにアクセスしようとしたときは常に安全です。この要素が存在しない場合はundefinedを取得します。

それを明確にするためのより多くの例:

const myArray: string[] = undefined
console.log(myArray.filter(x => x)?.[0]) //throws Cannot read property 'filter' of undefined
//in this example the optional chaining protects us from undefined array
const myArray: string[] = undefined
console.log(myArray?.filter(x => x)[0]) //outputs "undefined"
0
Pavel