diff --git a/src/TraitBuilder.ts b/src/TraitBuilder.ts index 6c43e8b..24d62ea 100644 --- a/src/TraitBuilder.ts +++ b/src/TraitBuilder.ts @@ -57,6 +57,19 @@ export class TraitBuilder< ) } + extendAbstract< + A extends Abstract + >( + abstract: (Super: AbstractClass) => AbstractClass + ) { + return new TraitBuilder( + this.traitSuperExpression, + {} as A, + this.traitStaticAbstract, + this.traitApply, + ) + } + implement< ImplClassWithAbstract extends ( Class & diff --git a/src/tests.ts b/src/tests.ts index 914ef53..688a352 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -28,14 +28,22 @@ const Identifiable = () => trait .build() const StatefulSubscription = trait - .abstract<{ - readonly isStatefulSubscription: true - readonly status: ( + // .abstract<{ + // readonly isStatefulSubscription: true + // readonly status: ( + // { _tag: "awaitingPayment" } | + // { _tag: "active", activeSince: Date, expiresAt?: Date } | + // { _tag: "expired", expiredSince: Date } + // ) + // }>() + .extendAbstract(Super => class extends Super { + readonly isStatefulSubscription!: true + readonly status!: ( { _tag: "awaitingPayment" } | { _tag: "active", activeSince: Date, expiresAt?: Date } | { _tag: "expired", expiredSince: Date } ) - }>() + }) .build() type StatefulSubscriptionClass = Trait.Class