const FieldBase = Schema.Struct({
id: Schema.String,
name: Schema.String,
description: Schema.optional(Schema.String)
})
const TextField = Schema.extend(
FieldBase,
Schema.Struct({
type: Schema.Literal("text")
})
)
const NumberField = Schema.extend(
FieldBase,
Schema.Struct({
type: Schema.Literal("number"),
options: Schema.Struct({
precision: Schema.Number
})
})
)
const FieldSchema = Schema.Union(
TextField,
NumberField
)
export type FieldSchema = typeof FieldSchema.Type
const CreateFieldSchema = FieldSchema.pipe(Schema.omit("id"))
const numberField = Schema.decodeUnknownSync(CreateFieldSchema)({
name: "Number Field",
type: "number",
options: { precision: 1 }
})
/* Output: The `options` property is omitted.
{ name: 'Number Field', type: 'number', description: undefined }
*/
const textField = Schema.decodeUnknownSync(CreateFieldSchema)({
name: "Text Field",
type: "text"
})
/* Output: This works as expected.
{ name: 'Text Field', type: 'text', description: undefined }
*/
const FieldBase = Schema.Struct({
id: Schema.String,
name: Schema.String,
description: Schema.optional(Schema.String)
})
const TextField = Schema.extend(
FieldBase,
Schema.Struct({
type: Schema.Literal("text")
})
)
const NumberField = Schema.extend(
FieldBase,
Schema.Struct({
type: Schema.Literal("number"),
options: Schema.Struct({
precision: Schema.Number
})
})
)
const FieldSchema = Schema.Union(
TextField,
NumberField
)
export type FieldSchema = typeof FieldSchema.Type
const CreateFieldSchema = FieldSchema.pipe(Schema.omit("id"))
const numberField = Schema.decodeUnknownSync(CreateFieldSchema)({
name: "Number Field",
type: "number",
options: { precision: 1 }
})
/* Output: The `options` property is omitted.
{ name: 'Number Field', type: 'number', description: undefined }
*/
const textField = Schema.decodeUnknownSync(CreateFieldSchema)({
name: "Text Field",
type: "text"
})
/* Output: This works as expected.
{ name: 'Text Field', type: 'text', description: undefined }
*/