TS - определить интерфейс переменной

Есть базовый интерфейс IBase. От него наследуются ещё 2 интерфейса.

interface IBase {
    num: number
    str: string
}

interface IDocument extends IBase {
    doc: IDoc
}

interface IDemand extends IBase {
    demand: IDemand
}

И пусть у меня есть функция, которая на вход принимает переменную одного из этих типов.

function(foo: IDemand | IDocument){
}

В зависимости от интерфейса нужно выполнить разное. Прочитал, что можно использовать typeGuard и написать функции, подобные:

function(foo: IDemand | IDocument): foo is IDocument {
    return !!foo.doc
}

Но на деле у меня 5 наследников, и тащить за собой эту цепочку возможных интерфейсов переменной, а также писать 5 функций кажется каким-то "некрасивым" решением, думаю, что есть решение получше. Подскажите, существует ли оно, и если да - какое? Спасибо заранее.


Ответы (0 шт):