Working expresses

This commit is contained in:
Julien Valverdé
2024-02-01 03:41:18 +01:00
parent a82c978c9e
commit 288969a789
3 changed files with 72 additions and 55 deletions

View File

@@ -3,16 +3,16 @@ import { AbstractClass, Class, Opaque } from "type-fest"
import { StaticMembers } from "./util"
type AddAbstractMembersToImpl<
Impl extends Class<object, []>,
AbstractMembers extends object,
> = (
Class<
InstanceType<Impl> & AbstractMembers,
ConstructorParameters<Impl>
> &
StaticMembers<Impl>
)
// type AddAbstractMembersToImpl<
// Impl extends Class<object, []>,
// AbstractMembers extends object,
// > = (
// Class<
// InstanceType<Impl> & AbstractMembers,
// ConstructorParameters<Impl>
// > &
// StaticMembers<Impl>
// )
type RemoveAbstractMembersFromImplInstance<
ImplInstanceWithAbstractMembers extends AbstractMembers,
@@ -21,7 +21,7 @@ type RemoveAbstractMembersFromImplInstance<
Omit<ImplInstanceWithAbstractMembers, keyof AbstractMembers>
)
type RemoveAbstractMembersFromImpl<
type RemoveAbstractMembersFromImplClass<
ImplWithAbstractMembers extends Class<AbstractMembers, []>,
AbstractMembers extends object,
> = (
@@ -63,7 +63,7 @@ export interface TraitAbstractMembersFn extends Fn {
export type TraitImplClass<T> = (
T extends Trait<infer AbstractMembers, infer ImplWithAbstractMembers>
? RemoveAbstractMembersFromImpl<
? RemoveAbstractMembersFromImplClass<
ImplWithAbstractMembers,
AbstractMembers
>