From dc410016515f630d970d32aeaa11c0ca6cf43c1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 24 Feb 2024 22:28:37 +0100 Subject: [PATCH] TraitExpressionBuilder refactoring --- src/TraitExpressionBuilder.ts | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/TraitExpressionBuilder.ts b/src/TraitExpressionBuilder.ts index 004ba8e..aa9acec 100644 --- a/src/TraitExpressionBuilder.ts +++ b/src/TraitExpressionBuilder.ts @@ -76,7 +76,10 @@ export class TraitExpressionBuilder< >[] >( ...traits: T - ) { + ): TraitExpressionBuilder< + Superclass, + TraitExpressionBuilder.ExpressesReturnTypeTraits + > { return new this.constructor( this.expressionSuperclass, @@ -99,7 +102,10 @@ export class TraitExpressionBuilder< >[] >( ...traits: T - ) { + ): TraitExpressionBuilder< + Superclass, + TraitExpressionBuilder.ExpressesFirstReturnTypeTraits + > { return new this.constructor( this.expressionSuperclass, @@ -166,6 +172,26 @@ export namespace TraitExpressionBuilder { : false ) + export type ExpressesReturnTypeTraits< + Traits extends readonly Trait[], + T extends readonly Trait[], + > = ( + TraitExpressionBuilder.TraitsUniq<[ + ...Traits, + ...TraitExpressionBuilder.SpreadSupertraits, + ]> + ) + + export type ExpressesFirstReturnTypeTraits< + Traits extends readonly Trait[], + T extends readonly Trait[], + > = ( + TraitExpressionBuilder.TraitsUniq<[ + ...TraitExpressionBuilder.SpreadSupertraits, + ...Traits, + ]> + ) + export type BuildTraitExpression< Superclass extends AbstractClass, Traits extends Trait[],