Skip to content

Instantly share code, notes, and snippets.

@neopryn
Created September 22, 2020 00:04
Show Gist options
  • Save neopryn/b00d0bdfd017cf2190369f85bbc6ad68 to your computer and use it in GitHub Desktop.
Save neopryn/b00d0bdfd017cf2190369f85bbc6ad68 to your computer and use it in GitHub Desktop.
Multi TS Discriminant Union
type PNGExtension = { extensionType: "PNG", pngRelatedConfig: string }
type JPEGExtension = { extensionType: "JPEG", jpegRelatedConfig: string }
type LineArt = { artType: "lineart", polylines: string[] }
type Shapes = { artType: "shapes", shapes: Shape[] }
type Art = LineArt | Shapes
type Extension = PNGExtension | JPEGExtension
type RenderMetadata = Art & Extension
const test: RenderMetadata = {
extensionType: "PNG",
pngRelatedConfig: "...",
artType: "lineart",
polylines: ["..."]
}
const getRendererForExtension = (x: Extension) => {
switch(x.extensionType) {
case "PNG":
return getPNGRenderer(x.pngRelatedConfig)
case "JPEG":
return getJPEGRenderer(x.jpegRelatedConfig)
}
}
const getPixelDataForArt = (x: Art) => {
switch(x.artType) {
case "lineart":
return getPixelsForPolylines(x.polylines)
case "shapes":
return getPixelsForShapes(x.shapes)
}
}
getRendererForExtension(test).render(getPixelDataForArt(test))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment