Remove redundant intersections
devanshj opened this issue · 0 comments
devanshj commented
One'd find many redudant intersections in the narrowed type, eg { a: number, b: string } & { a: number }
, these should be removed.
Apart for the fact it would lead to better-looking types, it'd also preserve heuristics that typescript applies to types, for instance the following code would compile if we remove the redundant & { 0: number }
. Although of course, it should have compiled with the redundant & { 0: number }
too.
import { p, pa } from "@sthir/predicate"
let x = {} as [number, string] | [string]
if (pa(x, p(".0 typeof ===", "number"))) {
const [_, ...y] = x;
// ^? [number, string] & { 0: number }
let test: [string] = y
// ~~~~
// Type '(string | number)[]' is not assignable to type '[string]'
}