Как написать type guard для отдельного поля интерфейса?
interface PostAttachVideo {
  type: 'video'
  attach: AttachVideo
}

interface PostAttachAudio {
  type: 'audio'
  attach: AttachAudio
}

type PostAttach = PostAttachAudio | PostAttachVideo

function isAudio(attach: PostAttach): attach is PostAttachAudio {
    return attach.type === 'audio';
}

песочница
На самом деле, тут отдельная функция и не нужна. Обычного if хватит: Песочница

А при вашем подходе:
export interface PostAttach {
    type: "video"|"audio",
    attach: AttachVideo|AttachAudio
}

TS никак не увидит связи между полями type и attach. Для него это два никак не связанных поля. Он предполагает, что возможны любые комбинации "video"|"audio" и AttachVideo|AttachAudio и тот факт что type = 'video' ничего не говорит про тип attach. 

Поэтому, их нужно разделить из одного универсального интерфейса, на несколько частных случаев.