This commit is contained in:
Julien Valverdé
2024-01-29 18:39:20 +01:00
parent 5f0d21d93b
commit e493331ff3
3 changed files with 26 additions and 14 deletions

View File

@@ -1,3 +1,4 @@
import { Fn } from "hotscript"
import { AbstractClass, Class, Opaque } from "type-fest"
import { StaticMembers } from "./util"
@@ -56,6 +57,10 @@ export type TraitAbstractMembers<T> = (
: never
)
export interface GetTraitAbstractMembers extends Fn {
return: TraitAbstractMembers<this["arg0"]>
}
export type TraitImplClass<T> = (
T extends Trait<infer AbstractMembers, infer ImplWithAbstractMembers>
? RemoveAbstractMembersFromImpl<
@@ -65,6 +70,10 @@ export type TraitImplClass<T> = (
: never
)
export interface GetTraitImplClass extends Fn {
return: TraitImplClass<this["arg0"]>
}
export type TraitImplInstance<T> = (
T extends Trait<infer AbstractMembers, infer ImplWithAbstractMembers>
? RemoveAbstractMembersFromImplInstance<
@@ -74,18 +83,30 @@ export type TraitImplInstance<T> = (
: never
)
export interface GetTraitImplInstance extends Fn {
return: TraitImplInstance<this["arg0"]>
}
export type TraitClass<T> = (
T extends Trait<any, infer ImplWithAbstractMembers>
? ImplWithAbstractMembers
: never
)
export interface GetTraitClass extends Fn {
return: TraitClass<this["arg0"]>
}
export type TraitInstance<T> = (
T extends Trait<any, infer ImplWithAbstractMembers>
? InstanceType<ImplWithAbstractMembers>
: never
)
export interface GetTraitInstance extends Fn {
return: TraitInstance<this["arg0"]>
}
export type TraitApplierSuperTag = "@thilawyn/traitify-ts/TraitApplierSuper"