This is possible with type predicates, example:
https://www.typescriptlang.org/play?#code/C4TwDgpgBAYg9nKBeK...
docs: https://www.typescriptlang.org/docs/handbook/2/narrowing.htm...
Wait, are you saying they added that in this release? That's awesome!
This is not part of this release.
Re:TypeScript 5.0
by silasdavis on Thursday March 16, 2023 @03:51PM
(#35187421)
It was would be nice for this to be automatic but filter does work like this it you pass a type guard as the predicate:
``` arr.filter((a: A): a is A & { kind: 'bar'} => a.kind === 'bar') ```
If you define:
``` function isKind<K extends A['kind']>(kind: K): (a: A) => a is A & { kind: K } { return (a): a is A & { kind: K } => a.kind === kind; } ```
Then you can write:
``` arr.filter(isKind('bar')) ```
and get a properly narrowed return type array
arr.filter(a => a.kind === βbarβ).map(a => /* a should now be of type Bar just like in a branch */)