Search Terms
narrow, array, filter
Suggestion
add this overload to Array<T>.filter:
filter(fn: typeof Boolean): Array<Exclude<T, null | undefined | 0 | ''>>
This may be considered too specific - but the use case is very common so hopefully worth it.
Use Cases
This will allow using array.filter(Boolean) to get rid of null/undefined/falsy values, and have the type system track it correctly even with strictNullChecks.
Right now the options are to use lodash.compact or write a similar function (not ideal to add a dependency), or to use ! (myArray.filter(Boolean).map(val => val!.foo(...))) which is a little dangerous.
Examples
Example
const maybeStrings = ['foo', null, 'bar']
const definitelyStrings = maybeStrings.filter(Boolean)
definitelyStrings is of type (string | null)[] even though it's impossible for nulls to be in it.
current behaviour:

proposed behaviour:

Checklist
My suggestion meets these guidelines:
Search Terms
narrow, array, filter
Suggestion
add this overload to
Array<T>.filter:This may be considered too specific - but the use case is very common so hopefully worth it.
Use Cases
This will allow using
array.filter(Boolean)to get rid of null/undefined/falsy values, and have the type system track it correctly even withstrictNullChecks.Right now the options are to use
lodash.compactor write a similar function (not ideal to add a dependency), or to use!(myArray.filter(Boolean).map(val => val!.foo(...))) which is a little dangerous.Examples
Example
definitelyStringsis of type(string | null)[]even though it's impossible fornulls to be in it.current behaviour:

proposed behaviour:

Checklist
My suggestion meets these guidelines: