Учитывая следующие определения типов:
type BaseItem = {
name: string;
purchasedAt: string;
purchasePrice: number;
};
type AvailableItem = BaseItem;
type SoldItem = BaseItem & {
soldAt: string;
sellingPrice: number;
};
export type Item = AvailableItem | SoldItem;
Почему TypeScript не жалуется на следующее выражение?
const invalidItem: Item = {
name: "foobar",
purchasedAt: "1-1-2019",
purchasePrice: 42,
soldAt: "5-1-2019"
// `sellingPrice` should be here, or `soldAt` should be absent
};
soldAt
и sellingPrice
должны либо оба присутствовать, либо вообще отсутствовать. Как заставить TypeScript применять этот инвариант?