Ввод расширяющейся функции на основе ее исходных типов

#typescript

#typescript

Вопрос:

У меня есть следующий код:

 type TypeA = {
  type: 'typeA';
  foo: number;
  typeB: TypeB;
};

type TypeB = {
  type: 'typeB';
  bar: number;
};

type IntersectionType = TypeA amp; TypeB;

const func = (val: TypeA): IntersectionType => {
  return { ...val, ...val.typeB };
};
  

но я получаю ошибку

The intersection 'IntersectionType' was reduced to 'never' because property 'type' has conflicting types in some constituents.

Есть ли способ правильно ввести функцию на основе TypeA и TypeB ?

TypeA и TypeB генерируются автоматически, поэтому я не могу их изменить.

Комментарии:

1. Каким вы хотите, чтобы type свойство объединения было? 'typeA' | 'typeB' ? string ?

2. На самом деле меня не волнует это свойство, оба в порядке. В этом примере тип всегда будет 'typeB' , что нормально.

3. Хотите ли вы, чтобы результат обладал typeB свойством? (Это произойдет по мере того, как функция будет написана в данный момент.)

4. Может быть, что-то вроде type UnionType = Omit<TypeA, 'type'> amp; Omit<TypeB, 'type'> amp; { type: string };

5. Изменил название типа на IntersectionType для наглядности