-
Notifications
You must be signed in to change notification settings - Fork 434
Open
Labels
Description
The oneOf properties is described in README as Not expressible in TypeScript.
I recently discovered the discriminated union type with a mutual exclusion, which fit perfectly with a XOR:
type MenuItemXor = {
title: string;
icon: string;
} & (
| { component: object; click?: never }
| { component?: never; click: boolean }
)
let testXor: MenuItemXor;
testXor = { title: "t", icon: "i" } // error, none are set
testXor = { title: "t", icon: "i", component: {} } // ✔
testXor = { title: "t", icon: "i", click: true } // ✔
testXor = { title: "t", icon: "i", click: true, component: {} } // error, both are setThis is well explained in this SO answer and seems to me a perfect fit for oneOf.
I can work on a PR if you feel OK with this feature.
scaleflake, NickDarvey, meshelton, victormoukhortov, rhyslbw and 3 more