diff --git a/src/Trait.ts b/src/Trait.ts index fbc5f90..91df43a 100644 --- a/src/Trait.ts +++ b/src/Trait.ts @@ -4,7 +4,7 @@ import { TraitExpression } from "./TraitExpression" import { ExtendFn, SimplifyFn, StaticMembers, StaticMembersFn } from "./util" -export type AddAbstractToImplClass< +type AddAbstractToImplClass< ImplClass extends Class, Abstract extends object, StaticAbstract extends object, diff --git a/src/TraitBuilder.ts b/src/TraitBuilder.ts index 94f7a53..a825162 100644 --- a/src/TraitBuilder.ts +++ b/src/TraitBuilder.ts @@ -5,9 +5,30 @@ import { TraitExpression } from "./TraitExpression" import { ExtendFn, SimplifyFn, StaticMembers } from "./util" -export type TraitApplierSuperTag = "@thilawyn/traitify-ts/Super" +type SuperAbstract = ( + Pipe, + Tuples.Append, + ExtendFn, + SimplifyFn, + ]> +) -export type RemoveAbstractFromImplClass< +type SuperStaticAbstract = ( + Pipe, + Tuples.Append, + ExtendFn, + SimplifyFn, + ]> +) + + +type TraitApplierSuperTag = "@thilawyn/traitify-ts/Super" + +type RemoveAbstractFromImplClass< ImplClassWithAbstract extends ( Class & StaticAbstract & @@ -40,7 +61,7 @@ export class TraitBuilder< private readonly traitApply: (Super: AbstractClass) => ImplClass, ) {} - abstract() { + abstract>() { return new TraitBuilder( this.traitSuperExpression, {} as A, @@ -49,16 +70,10 @@ export class TraitBuilder< ) } - extendAbstract( + extendAbstract>( _: ( Super: AbstractClass< - Pipe, - Tuples.Append, - ExtendFn, - SimplifyFn, - ]> + SuperAbstract > ) => AbstractClass ) { @@ -70,7 +85,7 @@ export class TraitBuilder< ) } - staticAbstract() { + staticAbstract>() { return new TraitBuilder( this.traitSuperExpression, this.traitAbstract, @@ -79,15 +94,9 @@ export class TraitBuilder< ) } - extendStaticAbstract( + extendStaticAbstract>( _: (Super: AbstractClass< - Pipe, - Tuples.Append, - ExtendFn, - SimplifyFn, - ]> + SuperStaticAbstract >) => AbstractClass ) { return new TraitBuilder( @@ -101,7 +110,7 @@ export class TraitBuilder< implement< ImplClassWithAbstract extends ( Class & - StaticAbstract & + SuperStaticAbstract & { _tag: TraitApplierSuperTag } ) >(