Schema.Union
from Schema (effect)
https://effect.website/docs/schema/basic-usage/#unions
decode時に上から評価していくので順序が重要
Discriminated Unionにするには普通にSchema.Literalを使う
code:ts
const Circle = Schema.Struct({
kind: Schema.Literal("circle"),
radius: Schema.Number
})
const Square = Schema.Struct({
kind: Schema.Literal("square"),
sideLength: Schema.Number
})
const Shape = Schema.Union(Circle, Square)
ただのunionをDiscriminated unionに変換する場合は、Schema.attachPropertySignatureが使える
code:ts
const Circle = Schema.Struct({
radius: Schema.Number
})
const Square = Schema.Struct({
sideLength: Schema.Number
})
const DiscriminatedShape = Schema.Union(
Circle.pipe(Schema.attachPropertySignature("kind", "circle")),
Square.pipe(Schema.attachPropertySignature("kind", "square"))
)