diff --git a/src/TraitExpression.ts b/src/TraitExpression.ts index 1296550..e24cb6d 100644 --- a/src/TraitExpression.ts +++ b/src/TraitExpression.ts @@ -7,12 +7,12 @@ import { ExtendFn, SimplifyFn, StaticMembersFn } from "./util" export class TraitExpressionNullSuperclass {} export class TraitExpression< - Super extends AbstractClass<{}>, - OwnTraits extends Trait[], - AllTraits extends Trait[], + Superclass extends AbstractClass<{}>, + OwnTraits extends Trait[], + AllTraits extends Trait[], > { constructor( - readonly superclass: Super, + readonly superclass: Superclass, readonly ownTraits: OwnTraits, readonly allTraits: AllTraits, ) {} @@ -20,18 +20,18 @@ export class TraitExpression< get extends(): ( AbstractClass< Pipe<[ - InstanceType, + InstanceType, ...Call, OwnTraits>, ], [ ExtendFn, SimplifyFn, ]>, - ConstructorParameters + ConstructorParameters > & Pipe<[ - Super, + Superclass, ...Call, OwnTraits>, ], [ Tuples.Map, @@ -41,7 +41,7 @@ export class TraitExpression< ) { return this.allTraits.reduce( (previous, trait) => trait.apply(previous), - this.superclass as Opaque, + this.superclass as Opaque, ) as any } @@ -62,13 +62,13 @@ export class TraitExpression< } export namespace TraitExpression { - export type Super = ( - T extends TraitExpression - ? Super + export type Superclass = ( + T extends TraitExpression + ? Superclass : never ) - export interface SuperFn extends Fn { - return: TraitExpression.Super + export interface SuperclassFn extends Fn { + return: TraitExpression.Superclass } export type OwnTraits = ( diff --git a/src/tests.ts b/src/tests.ts index e225d7f..1bc7e75 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,4 +1,4 @@ -import { Implements, Trait, abstract, expression, trait } from "." +import { Implements, Trait, TraitExpression, abstract, expression, trait } from "." const PrintsHelloOnNew = trait( @@ -57,6 +57,8 @@ const builder = expression StatefulSubscription, ) +type T = TraitExpression.OwnTraits + const exp = builder.get() type Abs = Implements