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 функций кажется каким-то "некрасивым" решением, думаю, что есть решение получше. Подскажите, существует ли оно, и если да - какое? Спасибо заранее.