Можно ли объявить тип, который определяет, что допустим только один из нескольких интерфейсов?
Например:
interface Bar {
properties: Record<string,any>
construct?: () => void
convert?: () => void
}
interface Foo {
type?: string
optional?: boolean
}
type FooBar = Bar | Foo;
//should not work
({
properties: {},
type: 'number'
} as FooBar);
//should not work
({
convert: () => {},
type: 'number'
} as FooBar);
//should work
({
type: 'number',
optional: true
} as FooBar);
//should work
({
properties: {},
convert: () => {}
} as FooBar);
Я хочу достичь, когда свойство: 'properties' определено, что могут быть добавлены только дополнительные свойства интерфейса 'Bar'. И когда свойство: 'properties' не определено, можно использовать только свойства интерфейса 'Foo'. Я попробовал это с Union, но тогда также возможно смешать интерфейсы.
Как я могу решить проблему и возможно ли это вообще?