Expresses work

This commit is contained in:
Julien Valverdé
2024-01-28 22:52:32 +01:00
parent 096d4a92e7
commit 8b01a13d7c
4 changed files with 84 additions and 83 deletions

View File

@@ -42,8 +42,32 @@ export type Trait<
}, TraitTag>
)
export type TraitAbstractMembers<T> = (
T extends Trait<infer AbstractMembers, any>
? AbstractMembers
: never
)
export type TraitApplierSuperTag = "@thilawyn/traitify-ts/Super"
export type TraitImpl<T> = (
T extends Trait<any, infer Impl>
? Impl
: never
)
export type TraitClass<T> = (
T extends Trait<infer AbstractMembers, infer Impl>
? AddAbstractMembersToImpl<Impl, AbstractMembers>
: never
)
export type TraitInstance<T> = (
T extends Trait<infer AbstractMembers, infer Impl>
? InstanceType<Impl> & AbstractMembers
: never
)
export type TraitApplierSuperTag = "@thilawyn/traitify-ts/TraitApplierSuper"
export type TraitApplier<
AbstractMembers extends object,
@@ -54,7 +78,6 @@ export type TraitApplier<
)
)
export function trait<
AbstractMembers extends object = {}
>(): (