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