diff --git a/src/expresses.ts b/src/expresses.ts index f439dc3..8f2d4dd 100644 --- a/src/expresses.ts +++ b/src/expresses.ts @@ -13,6 +13,10 @@ class TraitExpression< readonly traits: Traits, ) {} + then(fn: (e: this) => V): V { + return fn(this) + } + extends(): ( AbstractClass< Pipe<[ @@ -91,6 +95,7 @@ type ExtendsAndExpressesReturnType< Super extends AbstractClass, Traits extends readonly Trait[], > = ( + Call extends false ? AbstractMembersExtendable extends true ? ImplInstanceExtendable extends true ? ImplStaticMembersExtendable extends true ? @@ -98,6 +103,7 @@ type ExtendsAndExpressesReturnType< : "Type conflict between the traits implementation static members and/or the superclass static members." : "Type conflict between the traits implementation instances and/or the superclass instance." : "Type conflict between the traits abstract members and/or the superclass instance." + : "Cannot express an empty list of traits." ) export function extendsAndExpresses< diff --git a/src/tests.ts b/src/tests.ts index 2555515..b94dbe6 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -48,15 +48,16 @@ class TestSuperclass { } -const exp = extendsAndExpresses( +const User = extendsAndExpresses( TestSuperclass, Identifiable(), // Identifiable() +).then(e => + class User + extends e.extends() + implements Implements { + id: bigint = -1n + } ) -// type ExpImpl = ImplStaticMembersExtendable - -class User extends exp.extends() implements Implements { - id: bigint = -1n -} new User().id