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