diff --git a/src/TraitExpressionBuilder.ts b/src/TraitExpressionBuilder.ts index 11bbe5d..797f224 100644 --- a/src/TraitExpressionBuilder.ts +++ b/src/TraitExpressionBuilder.ts @@ -1,4 +1,3 @@ -import { Call, Fn, Tuples } from "hotscript" import { uniq } from "lodash-es" import { AbstractClass } from "type-fest" import { Trait, TraitTuple } from "./Trait" @@ -6,15 +5,15 @@ import { TraitExpression } from "./TraitExpression" import { Extendable, StaticMembers } from "./util" -type SpreadSupertraits[]> = ( - Call< - Tuples.FlatMap, - Traits - > +type SpreadSupertraits = ( + T extends [infer Trait, ...infer Rest] + ? [ + ...Trait.Supertraits, + Trait, + ...SpreadSupertraits, + ] + : [] ) -interface PrependTraitSupertraitsFn extends Fn { - return: [...Trait.Supertraits, this["arg0"]] -} type InstanceExtendable< @@ -81,10 +80,7 @@ class TraitExpressionBuilder< >[] >( ...traits: T - ): TraitExpressionBuilder< - Superclass, - [...Traits, ...SpreadSupertraits] - > { + ) { return new TraitExpressionBuilder( this.expressionSuperclass,