json-schema-to-typescript
json-schema-to-typescript copied to clipboard
Translate `oneOf` to a discriminated union type
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 set
This 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.
Hey there! Want to flesh this idea out a bit more? What are some example JSON-Schema inputs, and what outputs will you generate? I'd love to see how this might work for:
oneOfwith primitive typesoneOfwith object types that have the same keys, but different value typesoneOfwith recursively-defined typesoneOfwith combos of the above