😁
Array.filter ← これで型が絞れるようになるらしい
はじめに
いつも使っているArray.filter、TypeScriptで使用する上でどうしても不便なところがありました
それが修正されるかもしれないので私と同じように不便だと思っている人のために記事を書いてみました。
今までのfilter
const fruits = ['Apple', 'Banana', undefined]
const result = fruits.filter(x => x !== undefined)
// const result: (string | undefined)[]
console.log(result) // ['Apple', 'Banana']
このように、resultという変数にundefinedがない状況でもfilterを使用した場合は型が絞られませんでした。
Javascriptに慣れてきて、TypeScriptに足を踏み入れた頃は本当にここで躓きました、、
それが近い未来、変わるかもしれません。
これからのfilter
const fruits = ['Apple', 'Banana', undefined]
const result = fruits.filter(x => x !== undefined)
// const result: (string)[]
console.log(result) // ['Apple', 'Banana']
ちゃんと型が絞られています。1年前のわたしが見たら泣いてしまいます。
filterによって苦労しなくていいんです、asやisを使用しなくていいんです🥺
TypeScriptに革命が起きる
TypeScriptのリポジトリに投稿されたPull Requestにこんな投稿を見つけました。
このPR(Pull Request)により、コード内でisを記述しなくても補完してくれるようになるようです。
このPRがもたらす効果は絶大で、2017年, TypeScript 2.3の頃から存在している問題を修正することになります。
これが、filterを使用して要素を絞っても型が絞られない問題を報告したIssueです。
上記PRはすでにマージされており、該当Issueもクローズされています。
最後に
本当に嬉しいです、これは革命です。
もっと色んな人に知って欲しいので、もし良ければいいねをよろしくお願いします!
Discussion
このfilter-booleanも不要になる感じですかね?
Array.filter(Boolean)は今回の改善の対象外です;;