To require one of two properties to exist in a TypeScript interface, we can combine multiple interfaces with the |
operator, which create a union type.
For instance, we write
export interface BaseMenuItem {
title: string;
icon: string;
}
export interface ComponentMenuItem extends BaseMenuItem {
component: any;
}
export interface ClickMenuItem extends BaseMenuItem {
click: any;
}
export type MenuItem = ComponentMenuItem | ClickMenuItem;
to create a union type between ComponentMenuItem
and ClickMenuItem
and assign it to the MenuItem
type.
In ComponentMenuItem
and ClickMenuItem
, there’s one extra property and inherits the rest from BaseMenuItem
.
Therefore a variable with type MenuItem
has either the component
or click
property in addition to the properties in BaseMenuItem
.