Fix
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2024-02-03 01:30:20 +01:00
parent a061bac1de
commit 3c40a0a96b

View File

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