diff --git a/src/TraitExpressionBuilder.ts b/src/TraitExpressionBuilder.ts index 2885fe6..3591c74 100644 --- a/src/TraitExpressionBuilder.ts +++ b/src/TraitExpressionBuilder.ts @@ -33,7 +33,7 @@ export class TraitExpressionBuilder< return traits.flatMap(trait => [ ...trait.superExpression.traits, trait, - ]) as TraitExpressionBuilder.SpreadSupertraits + ]) as readonly Trait[] as TraitExpressionBuilder.SpreadSupertraits } static traitsUniq< @@ -49,7 +49,7 @@ export class TraitExpressionBuilder< >( traits: T ) { - return uniq(traits) as TraitExpressionBuilder.TraitsUniq + return uniq(traits) as readonly Trait[] as TraitExpressionBuilder.TraitsUniq } @@ -142,30 +142,30 @@ export class TraitExpressionBuilder< export namespace TraitExpressionBuilder { export type SpreadSupertraits = ( - Traits extends [ + Traits extends readonly [ infer El extends Trait, ...infer Rest, ] - ? [ + ? readonly [ ...Trait.Supertraits, El, ...SpreadSupertraits, ] - : [] + : readonly [] ) export type TraitsUniq = ( - Traits extends [ + Traits extends readonly [ ...infer Rest, infer El extends Trait, ] ? IsTraitInTupleFromRight extends true ? TraitsUniq - : [...TraitsUniq, El] - : [] + : readonly [...TraitsUniq, El] + : readonly [] ) type IsTraitInTupleFromRight = ( - Traits extends [...infer Rest, infer El] + Traits extends readonly [...infer Rest, infer El] ? IsEqual extends true ? true : IsTraitInTupleFromRight