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[],