diff --git a/.changeset/lazy-pigs-cross.md b/.changeset/lazy-pigs-cross.md index 5f054de4e..7fb05a7ec 100644 --- a/.changeset/lazy-pigs-cross.md +++ b/.changeset/lazy-pigs-cross.md @@ -1,5 +1,5 @@ --- -"@effect/schema": minor +"@effect/schema": patch --- -Enforce explicit `Schema.Class` type parameters for better developer experience +Enforce explicit `Schema.Class` type parameters diff --git a/docs/modules/Schema.ts.md b/docs/modules/Schema.ts.md index c9d72acdd..b5c8c98e4 100644 --- a/docs/modules/Schema.ts.md +++ b/docs/modules/Schema.ts.md @@ -999,7 +999,9 @@ Added in v1.0.0 ```ts export declare const Class: () => ( fields: Fields -) => Self extends never ? never : Class>, Simplify>, Self, Data.Case> +) => [Self] extends [never] + ? 'missing Self generic - use `class Self extends Class()({ ... })`' + : Class>, Simplify>, Self, Data.Case> ``` Added in v1.0.0 @@ -1016,8 +1018,8 @@ export interface Class extends Schema() => ( fields: FieldsB - ) => Extended extends never - ? never + ) => [Extended] extends [never] + ? 'missing Self generic - use `class Self extends Base.extend()({ ... })`' : Class< Simplify & FromStruct>, Simplify & ToStruct>, @@ -1029,16 +1031,16 @@ export interface Class extends Schema ParseResult.ParseResult & ToStruct>, encode: (input: Simplify & ToStruct>) => ParseResult.ParseResult - ) => Transformed extends never - ? never + ) => [Transformed] extends [never] + ? 'missing Self generic - use `class Self extends Base.transform()({ ... })`' : Class & ToStruct>, Transformed, Self> readonly transformFrom: () => ( fields: FieldsB, decode: (input: I) => ParseResult.ParseResult & FromStruct>, encode: (input: Simplify & FromStruct>) => ParseResult.ParseResult - ) => Transformed extends never - ? never + ) => [Transformed] extends [never] + ? 'missing Self generic - use `class Self extends Base.transformFrom()({ ... })`' : Class & ToStruct>, Transformed, Self> } ``` diff --git a/src/Schema.ts b/src/Schema.ts index a7307ea7c..348232ea6 100644 --- a/src/Schema.ts +++ b/src/Schema.ts @@ -3355,12 +3355,14 @@ export interface Class extends Schema() => ( fields: FieldsB - ) => Extended extends never ? never : Class< - Simplify & FromStruct>, - Simplify & ToStruct>, - Extended, - Self - > + ) => [Extended] extends [never] + ? "missing Self generic - use `class Self extends Base.extend()({ ... })`" + : Class< + Simplify & FromStruct>, + Simplify & ToStruct>, + Extended, + Self + > readonly transform: () => < FieldsB extends StructFields @@ -3372,12 +3374,14 @@ export interface Class extends Schema & ToStruct> ) => ParseResult.ParseResult - ) => Transformed extends never ? never : Class< - I, - Simplify & ToStruct>, - Transformed, - Self - > + ) => [Transformed] extends [never] + ? "missing Self generic - use `class Self extends Base.transform()({ ... })`" + : Class< + I, + Simplify & ToStruct>, + Transformed, + Self + > readonly transformFrom: () => < FieldsB extends StructFields @@ -3389,12 +3393,14 @@ export interface Class extends Schema & FromStruct> ) => ParseResult.ParseResult - ) => Transformed extends never ? never : Class< - I, - Simplify & ToStruct>, - Transformed, - Self - > + ) => [Transformed] extends [never] + ? "missing Self generic - use `class Self extends Base.transformFrom()({ ... })`" + : Class< + I, + Simplify & ToStruct>, + Transformed, + Self + > } /** @@ -3404,7 +3410,7 @@ export interface Class extends Schema() => ( fields: Fields -): Self extends never ? never +): [Self] extends [never] ? "missing Self generic - use `class Self extends Class()({ ... })`" : Class>, Simplify>, Self> => makeClass(struct(fields), fields, Data.Class.prototype)