diff --git a/src/TraitExpression.ts b/src/TraitExpression.ts index c0ea010..a20ca73 100644 --- a/src/TraitExpression.ts +++ b/src/TraitExpression.ts @@ -63,10 +63,12 @@ export class TraitExpression< export const emptyTraitExpression = new TraitExpression(TraitExpressionNullSuperclass, [] as const) interface PrependTraitSupertraitsFn extends Fn { - return: [ - ...Call, - this["arg0"], - ] + return: this["arg0"] extends Trait + ? [ + ...Call, + this["arg0"], + ] + : never } export interface TraitExpressionTraitsFn extends Fn { return: this["arg0"] extends TraitExpression diff --git a/src/tests.ts b/src/tests.ts index 710a660..421b746 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,4 +1,5 @@ -import { Implements, abstract, expression, trait } from "." +import { Call } from "hotscript" +import { Implements, TraitExpressionTraitsFn, abstract, expression, trait } from "." const PrintsHelloOnNew = trait( @@ -54,10 +55,11 @@ const builder = expression PrintsHelloOnNew, Identifiable(), // Identifiable(), + StatefulSubscription, ) const exp = builder.get() -type Abs = Implements +type Abs = Call class User extends exp.extends implements Implements { id: bigint = -1n