На самом деле, тут отдельная функция и не нужна. Обычного
if хватит:
Песочница
А при вашем подходе:
export interface PostAttach {
type: "video"|"audio",
attach: AttachVideo|AttachAudio
}
TS никак не увидит связи между полями
type и
attach. Для него это два никак не связанных поля. Он предполагает, что возможны любые комбинации
"video"|"audio" и
AttachVideo|AttachAudio и тот факт что
type = 'video' ничего не говорит про тип
attach.
Поэтому, их нужно разделить из одного универсального интерфейса, на несколько частных случаев.