diff --git a/src/makeSchemableClass.ts b/src/makeSchemableClass.ts index 759c80c..e14700d 100644 --- a/src/makeSchemableClass.ts +++ b/src/makeSchemableClass.ts @@ -1,4 +1,4 @@ -import { AbstractClass, Class } from "type-fest" +import { AbstractClass, Class as ConcreteClass } from "type-fest" import { z } from "zod" import { StaticMembers } from "./util" @@ -9,8 +9,9 @@ export function makeSchemableClassFrom< SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, - SchemaValues extends {}, - DefaultValues extends Partial, + + Values extends {}, + DefaultValues extends Partial, >( extend: C, @@ -18,39 +19,39 @@ export function makeSchemableClassFrom< SchemaT, SchemaUnknownKeys, SchemaCatchall, - SchemaValues, - SchemaValues + Values, + Values >, defaultValues: DefaultValues, ) { - type ClassKind = ( - C extends Class - ? Class + type Class = ( + C extends ConcreteClass + ? ConcreteClass : AbstractClass ) - return class extends (extend as unknown as Class) { + return class extends (extend as unknown as ConcreteClass) { static readonly schema = schema readonly schema = schema static readonly defaultValues = defaultValues readonly defaultValues = defaultValues - constructor(values: SchemaValues) { + constructor(values: Values) { super() Object.assign(this, values) } } as unknown as ( - ClassKind< + Class< Omit, "schema" | "defaultValues"> & { readonly schema: typeof schema, readonly defaultValues: typeof defaultValues, } & - SchemaValues, + Values, - Parameters<(values: SchemaValues) => void> + Parameters<(values: Values) => void> > & Omit, "schema" | "defaultValues"> & @@ -66,15 +67,16 @@ export function makeSchemableClass< SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, - SchemaValues extends {}, - DefaultValues extends Partial, + + Values extends {}, + DefaultValues extends Partial, >( schema: z.ZodObject< SchemaT, SchemaUnknownKeys, SchemaCatchall, - SchemaValues, - SchemaValues + Values, + Values >, defaultValues: DefaultValues,