Safe, ergonomic, non-generic sum types in TypeScript.
Documentation: unsplash.github.io/sum-types
import * as Sum from "@unsplash/sum-types"
type Weather = Sum.Member<"Sun"> | Sum.Member<"Rain", number>
const Weather = Sum.create<Weather>()
const getRainfall = Weather.match({
Rain: n => `${n}mm`,
Sun: () => "none",
})
const todayWeather = Weather.mk.Rain(5)
getRainfall(todayWeather) // '5mm'
The library is available on the npm registry: @unsplash/sum-types
Note that due to usage of Proxy
and Symbol
this library only supports ES2015+.
The following bindings are also available:
The library solves a number of problems we've experienced at Unsplash with alternative libraries in this space. Specifically:
The compromise we've made to achieve this is to not support generic sum types.