Microsoft/TypeScript

Distributive conditional types can't distribute over `NoInfer` types wrapping a union

オープン

#61,076 opened on 2025/01/29

 (0 件のコメント) (0 件のリアクション) (0 人の担当者)TypeScript (13,395 件のフォーク)batch import
Domain: Conditional TypesHelp WantedPossible Improvement

Repository metrics

Stars
 (108,860 個のスター)
PR merge metrics
 (PR metrics pending)

説明

🔎 Search Terms

noinfer union distributive conditional distribution

🕗 Version & Regression Information

  • This is the behavior in every version I tried

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.8.0-dev.20250129&ssl=10&ssc=8&pln=1&pc=1#code/C4TwDgpgBAYg9nAogNwgO2FAvFA3lUSALigCIYB5C0qAXwG4AoQ6AIQEMAnFdTHfFiVKsAggCUaDRs3DQAkmjABXPrAQ8MUAD5QO3VBiYzIUMRADOSgDarEAD2Cd2AY2AAeBcuAAaNUgPAAHxMAPQhUBEAegD80iymFtbAAEzYUPaOLu4AcnAKAGYQnB6KKoG+8P68wYxhEVAxjEA

💻 Code

type FooEvent = { type: "FOO" };
type BarEvent = { type: "BAR" };

type Input = FooEvent | BarEvent;

type Result = Extract<Input, FooEvent>;
//   ^? type Result = { type: "FOO"; }

type Result2 = Extract<NoInfer<Input>, FooEvent>;
//   ^? type Result2 = never

🙁 Actual behavior

Result2 gets computed as never

🙂 Expected behavior

Result2 should get computed as { type: "FOO"; }

Additional information about the issue

This is repro for the core problem behind this incorrect behavior: TS playground

コントリビューターガイド