From 0b0ca2326c454fbc49a3d38b561719f28fe6b625 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 14 Feb 2024 22:33:23 +0100 Subject: [PATCH] extendStaticAbstract --- src/TraitBuilder.ts | 21 +++++++++++++++------ src/tests.ts | 20 ++++++-------------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/TraitBuilder.ts b/src/TraitBuilder.ts index 24d62ea..f0719d4 100644 --- a/src/TraitBuilder.ts +++ b/src/TraitBuilder.ts @@ -1,6 +1,6 @@ import { AbstractClass, Class } from "type-fest" import { Trait } from "./Trait" -import { TraitExpression } from "./TraitExpression" +import { Implements, ImplementsStatic, TraitExpression } from "./TraitExpression" import { StaticMembers } from "./util" @@ -48,6 +48,17 @@ export class TraitBuilder< ) } + extendAbstract( + _: (Super: AbstractClass & Abstract>) => AbstractClass + ) { + return new TraitBuilder( + this.traitSuperExpression, + {} as A, + this.traitStaticAbstract, + this.traitApply, + ) + } + staticAbstract() { return new TraitBuilder( this.traitSuperExpression, @@ -57,15 +68,13 @@ export class TraitBuilder< ) } - extendAbstract< - A extends Abstract - >( - abstract: (Super: AbstractClass) => AbstractClass + extendStaticAbstract( + _: (Super: AbstractClass & StaticAbstract>) => AbstractClass ) { return new TraitBuilder( this.traitSuperExpression, + this.traitAbstract, {} as A, - this.traitStaticAbstract, this.traitApply, ) } diff --git a/src/tests.ts b/src/tests.ts index 688a352..8067fbf 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -51,20 +51,12 @@ type StatefulSubscriptionClass = Trait.Class const ActiveStatefulSubscription = expression .expresses(StatefulSubscription) .build() - .subtrait( - exp => { - interface IActiveStatefulSubscription extends Implements { - readonly isActiveStatefulSubscription: true - readonly status: { _tag: "active", activeSince: Date, expiresAt?: Date } - } - - return abstract() - }, - - exp => abstract>(), - - Super => class ActiveStatefulSubscription extends Super {}, - ) + .subtrait() + .extendAbstract(Super => class extends Super { + readonly isActiveStatefulSubscription!: true + readonly status!: { _tag: "active", activeSince: Date, expiresAt?: Date } + }) + .build() type ActiveStatefulSubscriptionClass = Trait.Class