Извините за простой вопрос людям, более знакомым с системами типов. Почему встраивание условного оператора в машинописный текст дает разные результаты?
Например, если я использую условное выражение Extract , я получаю другое поведение, если я встраиваю его, и если я использую его как общий c:
// setup
type TUnion = ['foo', 1] | ['baz', 2];
type TDiscriminator = ['foo', any];
// using the conditional generic
type Extract<T, U> = T extends U ? T : never;
type TExtracted = Extract<TUnion, TDiscriminator>; // ["foo", 1]
// inlining the conditional
type TInlined = TUnion extends TDiscriminator ? TUnion : never; // never
Когда я sh об этом дальше, мне кажется, что значение T нужно передать в:
type ExtractWithU<T> = T extends TDiscriminator ? T : never;
type TExtractedWithU = ExtractWithU<TUnion>; // ["foo", 1]
type ExtractWithT<U> = TUnion extends U ? TUnion : never;
type TExtractedWithT = ExtractWithT<TDiscriminator>; // never
Я упустил что-то действительно простое?