diff --git a/src/trait.ts b/src/trait.ts index 37951c2..6309935 100644 --- a/src/trait.ts +++ b/src/trait.ts @@ -3,7 +3,7 @@ import { AbstractClass, Class, Opaque } from "type-fest" import { StaticMembers } from "./util" -type AddAbstractToImplClass< +type AddAbstractToImpl< Impl extends Class, Abstract extends object, > = ( @@ -14,26 +14,15 @@ type AddAbstractToImplClass< StaticMembers ) -type RemoveAbstractFromImplInstance< - ImplInstanceWithAbstractMembers extends AbstractMembers, - AbstractMembers extends object, -> = ( - Omit -) - -type RemoveAbstractFromImplClass< - ImplWithAbstractMembers extends Class, - AbstractMembers extends object, +type RemoveAbstractFromImpl< + ImplWithAbstract extends Class, + Abstract extends object, > = ( Class< - RemoveAbstractFromImplInstance< - InstanceType, - AbstractMembers - >, - - ConstructorParameters + Omit, keyof Abstract>, + ConstructorParameters > & - StaticMembers + StaticMembers ) @@ -46,7 +35,7 @@ export type Trait< Opaque<{ readonly apply: TraitApplier< Abstract, - AddAbstractToImplClass + AddAbstractToImpl > }, TraitTag> ) @@ -83,7 +72,7 @@ export interface TraitImplInstanceFn extends Fn { export type TraitClass = ( T extends Trait - ? AddAbstractToImplClass + ? AddAbstractToImpl : never ) @@ -94,7 +83,7 @@ export interface TraitClassFn extends Fn { export type TraitInstance = ( T extends Trait ? InstanceType< - AddAbstractToImplClass + AddAbstractToImpl > : never ) @@ -122,7 +111,7 @@ export function trait< apply: TraitApplier ) => Trait< Abstract, - RemoveAbstractFromImplClass + RemoveAbstractFromImpl > ) { return apply => ({ apply }) as any