From 40eaa80eb63058b447abf5eed42b524239a56363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sun, 18 Feb 2024 22:06:33 +0100 Subject: [PATCH] TraitBuilder work --- src/Trait.ts | 8 ++++++-- src/TraitBuilder.ts | 21 ++++++++++++--------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/Trait.ts b/src/Trait.ts index e8f5cfd..2a2cfbe 100644 --- a/src/Trait.ts +++ b/src/Trait.ts @@ -97,11 +97,15 @@ export namespace Trait { export namespace Traits { export type MapImplClass = { - [K in keyof T]: Trait.OwnImplClass + [K in keyof T]: K extends keyof [] + ? T[K] + : Trait.OwnImplClass } export type MapImplInstance = { - [K in keyof T]: Trait.OwnImplInstance + [K in keyof T]: K extends keyof [] + ? T[K] + : Trait.OwnImplInstance } export type MapImplStaticMembers = { diff --git a/src/TraitBuilder.ts b/src/TraitBuilder.ts index 420202c..1a68621 100644 --- a/src/TraitBuilder.ts +++ b/src/TraitBuilder.ts @@ -5,18 +5,25 @@ import { ExtendPlain, StaticMembers } from "./util" type ImplSuper< - Supertraits extends Trait[], + SuperExpression extends TraitExpression< + typeof TraitExpression.NullSuperclass, + Trait[] + >, Abstract extends object, StaticAbstract extends object, > = ( AbstractClass< ExtendPlain<[ - ...Traits.MapImplInstance, + ...Traits.MapImplInstance< + TraitExpression.Traits + >, Abstract, ]> > & ExtendPlain<[ - ...Traits.MapImplStaticMembers, + ...Traits.MapImplStaticMembers< + TraitExpression.Traits + >, StaticAbstract, ]> & { readonly _tag: "@thilawyn/traitify-ts/Super" } // TODO: replace with unique symbol? @@ -63,17 +70,13 @@ export class TraitBuilder< implement< ImplClassWithAbstract extends ImplSuper< // TODO: use This instead? - TraitExpression.Traits, + SuperExpression, Abstract, StaticAbstract > >( apply: ( - Super: ImplSuper< - TraitExpression.Traits, - Abstract, - StaticAbstract - > + Super: ImplSuper ) => ImplClassWithAbstract ) { return new TraitBuilder(