diff --git a/src/tests.ts b/src/tests.ts index aedbc6e..39aece7 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,5 +1,5 @@ import { Simplify } from "type-fest" -import { Trait, TraitAbstractMembers, TraitImplInstance, expresses, trait } from "." +import { GetTraitAbstractMembers, GetTraitClass, GetTraitImplClass, GetTraitImplInstance, GetTraitInstance, Trait, TraitAbstractMembers, TraitImplInstance, expresses, trait } from "." import { MergeInheritanceTree, TraitsAbstractMembers } from "./util" import { Call, Fn, Tuples } from "hotscript" @@ -41,13 +41,6 @@ const ActiveStatefulSubscription = trait - ? AbstractMembers - : never -} - // type Test = Simplify>>> type Test1 = [ TraitAbstractMembers, @@ -58,12 +51,10 @@ type Test2 = TraitsAbstractMembers<[ typeof ActiveStatefulSubscription, ]> type Test3 = Simplify< - MergeInheritanceTree< - Call, [ - typeof StatefulSubscription, - typeof ActiveStatefulSubscription, - ]> - > + Call, [ + typeof StatefulSubscription, + typeof ActiveStatefulSubscription, + ]> > // type Test2 = Simplify> diff --git a/src/trait.ts b/src/trait.ts index c300475..a73f4d1 100644 --- a/src/trait.ts +++ b/src/trait.ts @@ -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 = ( : never ) +export interface GetTraitAbstractMembers extends Fn { + return: TraitAbstractMembers +} + export type TraitImplClass = ( T extends Trait ? RemoveAbstractMembersFromImpl< @@ -65,6 +70,10 @@ export type TraitImplClass = ( : never ) +export interface GetTraitImplClass extends Fn { + return: TraitImplClass +} + export type TraitImplInstance = ( T extends Trait ? RemoveAbstractMembersFromImplInstance< @@ -74,18 +83,30 @@ export type TraitImplInstance = ( : never ) +export interface GetTraitImplInstance extends Fn { + return: TraitImplInstance +} + export type TraitClass = ( T extends Trait ? ImplWithAbstractMembers : never ) +export interface GetTraitClass extends Fn { + return: TraitClass +} + export type TraitInstance = ( T extends Trait ? InstanceType : never ) +export interface GetTraitInstance extends Fn { + return: TraitInstance +} + export type TraitApplierSuperTag = "@thilawyn/traitify-ts/TraitApplierSuper" diff --git a/src/util/extend.ts b/src/util/extend.ts new file mode 100644 index 0000000..e69de29