Repository: TypeScript
Issue: Predicates break arbitrarily when intersected with some types. (Probably when the predicate is generic).
Labels: Bug,Help Wanted

### 🔎 Search Terms

predicate intersection

### 🕗 Version & Regression Information

latest version v5.6.2


### ⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.6.2#code/JYOwLgpgTgZghgYwgAgCpQK5gBYE8AKUEAJsAnJMgN4CwAUMo8gDyoB8AFAPYBcaAlHy7JgAZzTIAZNQC+Abnoz69UJFiIUAUQC2ABzC4AkuGjwk1RcroHdKAMJcQosJgRguUAMrAA5iDg+GETIALwWDEwgEADuyBwAdIlwUD6ifHAguADaALqCyBm4CnTyVsQQCAA2ySgIjs4FUFB8HM5QoD7IAD7IGCDlMKAk-LnF9OVVNch1TmDIukSk5JAAjHzoWHiEJGQUEMUzDYOVaiQroY1Q8cdqHAs7yxAr-HLIAPRvyNEeANbibR1clZxhVqsFDnN7ks9gAmdaYHAERa7SjSHT6IwmdRIA71OY3aAkGEXZJXAlQO7Ix4wl7vT7ELgQUQgADkc2+UB+wLoEzBtTx8ypewAzPDNkiHnspLJcbNkOSSMKSU1rsATtBKZLIMLaR8vr9-i5ATlubyphDBVqIAAWMWI7bQ1HIByzVzuLy+fyBIiyo5q07Ea3Ksn+jVQlE23X0xnMtn6zn0IA

### 💻 Code

```ts
interface TruthyPredicate {
    <T>(o: T): o is T & {};
}

interface EmptyInterface {
}

type ConstructorSignagure = {
    new (...args: any[]): any;
};

declare const arr: (string | undefined)[];

declare const predicate1: TruthyPredicate;
const filtered1 = arr.filter(predicate1); // works string[]


declare const predicate2: TruthyPredicate & EmptyInterface;
const filtered2 = arr.filter(predicate2); // doesn't work


declare const predicate3: TruthyPredicate & {} /* Empty object type instead of interface */;
const filtered3 = arr.filter(predicate3); // works string[]


declare const predicate4: TruthyPredicate & ConstructorSignagure;
const filtered4 = arr.filter(predicate4); // doesn't work
```


### 🙁 Actual behavior

Predicate stops working

### 🙂 Expected behavior

Predicate works

### Additional information about the issue

I tried other scenarios
- [truthy variation](https://www.typescriptlang.org/play/?ts=5.6.2#code/JYOwLgpgTgZghgYwgAgCpQK5gBYE8AKUEAJsAnJMgN4CwAUMo8gDyoB8AFAPYBcayAH2QYQxCDFAkAlHy7JgAZzQBuegF969UJFiIUAUQC2ABzC4AkuGjwk1dZrpnjKAMJcQCsJgRguUAMrAAOYgcEEYRMgAvHYMTCAQAO7IHAB06XBQQQp8cCC4ANoAujLIebiqdGqV9GIIADaZKAjunmVQUHwcnlCgQYLCouKSxFLFNXR1jZEtHmDIxkSk5JAAjHzoWHiEJGQUEJWzbRL1OiSr0e1QqSc6HIu7KxCrUsrIAPTvyIl+ANZKPT6xQctQgDSayCO8wey32ACYNpgcAQlntKAAyZBGUwWKy6JCHVrzW7QEhwy6Za4kqD3VFPOGvD5fYhcCAKEAAcnmPygvxBkzB02aRIWdP2AGZEVsUY99shMVRqvQochqSRxRSOjdgKdoLTZZBxYzPt8-gCvECivyphCVTC0RAACxS5E7WEY5BuObeXwBYKhcJEQlzVU6s7ER2aqlhvX2p6O43M1nsrmm3n0IA)
- [generic without undefined](https://www.typescriptlang.org/play/?ts=5.6.2#code/JYOwLgpgTgZghgYwgAgMpiqA5gBShAE2ATkmQG8BYAKGTuQB4AVAPgAoB7ALmSYEoeHZMADOyAKIAPDIjDMANMhEZsLANw0AvjRqhIsRCnEBbAA5gAngElw0eEgpad1S6ZQBhDiGVQArgjAOKFRgLBA4LF98ZABeR1p6EAgAd2Q2ADpMuCgsER44EAsAbQBdAWQCiw1qTWqaAggEABtslAQvZQqoKB42H2xkAB9kEF9jACNoPlK66gbm1uR27zBkU3wiEkgARh50TBBcDeJSCGrlzphgJv1CbdiuqHSrm+g2dcITnb41ZAB6P7IZJBADWYn6h1KznqjRa0Quqw+m1OACY9ipDnhPlsUAAyCRmSw2fT2M40BHIF63Agoh7ZJ5Ut5Ir4QFE-f6AggcCAiEAAclWwKgIOhc1hiwpzJxAGZ0QcjtjTsh8eRauSOqtGRtpXTus9rvp3scZeyAUDQeCMVgodRnPM4W0NWtjacACxy7BY5FkfGeFZ+AJBEJhCJRMnUClawiu3UMg1Ml2QV2mznc3kC83CmhAA)
- [non-generic, always works, but won't be able to use the parameter type](https://www.typescriptlang.org/play/?ts=5.6.2#code/JYOwLgpgTgZghgYwgAgMpiqA5gBShAE2ATkmQG8BYAKGTuQAoB7ALmQGcNtkAfZEAK4BbAEbQAlGybJg7DlxBYA3DQC+NGqEixEKAKJCADmACeASXDR4SCmo3VThlAGEmITlAEIwTKKmBYIHBYAvjIALy2tPQgEADujAB0yXBQWOxscCAmANoAupLIWSYq1KqlNAQQCAA2qSgIbpxFUFBsDB7cfIKiEvkV1FW19ciN7mDIhvhEJJAAjGzomIp4hMSkEKVjzTDANdqEcxEtUIm7+9AMU2uzEHPiSsgA9E-Icb4A1nKdivn2ldU6mFthNrjMNgAmRYKXDTdZkABkyAMxnMlh0SC2TQm5wOBAhx1Sp1xlzB8IgEIez1e7ygX3kyywf2o9iGQIa2MmcNuAGZoYzVuDERRyjQQcgSdMeYTWmc9tortyNjyqS83p9vjDmazASNxWTbgAWfnYQXk5BI1zjTzeXz+QLBUKbMWcyWEQ0y4ny0lKyCG1U0jUM7DMoA)
- [this is why it needs to support generics](https://www.typescriptlang.org/play/?ts=5.6.2#code/JYOwLgpgTgZghgYwgAgMpiqA5gBShAE2ATkmQG8BYAKGTuQB4AVAPgAoB7ALmSYEoeHZMADOyAKIAPDIjDMANMhEZsLANw0AvjRqhIsRCnEBbAA5gAngElw0eEgpad1S6ZQBhDiGVQArgjAOKFRgLBA4LF98ZABeR1p6EAgAd2Q2ADpMuCgsER44EAsAbQBdAWQCiw1qTWqaAggEABtslAQvZQqoKB42AHIvCD7kAB9kPrBkjmGxkF9jACNoPlK66gbm1uR27zBkU3wiEkgARh50TBBcQ+JSCGqdzphgJv1CE9iuqHTn1+g2A6EW6nPhqZAAenByCmUAA1mJ+oMZuNJtMViVnPVGi1oo89oCjncAEznFRXPBA44oABkEjMlhs+ns9xoeOQvzeBCJn2y3w5-wJwIgRNBEKhBA4EBEIAm0KCsMx62xWzZgqpAGZSZdrpS7shaeRaqyOnt+Yd1Tzuj8XvoATcNaLIXK4QiBklkRMpn10YqNji2ib9va7gAWLXYCmEsi0zy7PwBIIhMIRKIs6hss2EEOWvk2gXByAhx3iyXS2UwhXUIA)