From adf8439cd6d92baaaaf1c550e7e260dd43af3e55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 21 Feb 2024 04:03:30 +0100 Subject: [PATCH] Working TraitsUniq --- src/TraitExpressionBuilder.ts | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) 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