Files
thilalib/src/Schema/MutableTaggedClass.ts
Julien Valverdé 7179913d6d
Some checks failed
Publish / publish (push) Failing after 14s
Lint / lint (push) Successful in 12s
0.1.6 (#7)
Co-authored-by: Julien Valverdé <julien.valverde@mailo.com>
Reviewed-on: #7
2024-07-29 18:42:05 +02:00

38 lines
923 B
TypeScript

import { Schema } from "@effect/schema"
import type { IMutableClass } from "./MutableClass"
import type { HasFields } from "./util"
export interface IMutableTaggedClass<
Self,
Tag,
Fields extends Schema.Struct.Fields,
>
extends IMutableClass<
Self,
Fields,
Schema.Struct.Encoded<Fields>,
Schema.Struct.Context<Fields>,
Schema.Struct.Constructor<Omit<Fields, "_tag">>,
{},
{}
>
{
readonly _tag: Tag
}
export const MutableTaggedClass = Schema.TaggedClass as <Self>(identifier?: string) =>
<
Tag extends string,
Fields extends Schema.Struct.Fields,
>(
tag: Tag,
fieldsOr: Fields | HasFields<Fields>,
annotations?: Schema.Annotations.Schema<Self>,
) => IMutableTaggedClass<
Self,
Tag,
{ readonly _tag: Schema.PropertySignature<":", Tag, never, ":", Tag, true, never> } & Fields
>