diff --git a/src/TraitExpressionBuilder.ts b/src/TraitExpressionBuilder.ts index 7921146..efdfeb9 100644 --- a/src/TraitExpressionBuilder.ts +++ b/src/TraitExpressionBuilder.ts @@ -5,26 +5,32 @@ import { TraitExpression } from "./TraitExpression" import { Extendable, StaticMembers } from "./util" -type SpreadSupertraits = ( - T extends [infer Trait, ...infer Rest] +type SpreadSupertraits = ( + Traits extends [ + infer El extends Trait, + ...infer Rest, + ] ? [ - ...Trait.Supertraits, - Trait, + ...Trait.Supertraits, + El, ...SpreadSupertraits, ] : [] ) type TraitsUniq = ( - Traits extends [...infer Rest, infer Trait] - ? IsTraitInTupleFromRight extends true + Traits extends [ + ...infer Rest, + infer El extends Trait, + ] + ? IsTraitInTupleFromRight extends true ? TraitsUniq - : [...TraitsUniq, Trait] + : [...TraitsUniq, El] : [] ) type IsTraitInTupleFromRight = ( - Traits extends [...infer Rest, infer Trait] - ? IsEqual extends true + Traits extends [...infer Rest, infer El] + ? IsEqual extends true ? true : IsTraitInTupleFromRight : false