TraitBuilder work
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2024-02-18 22:06:33 +01:00
parent 20554ec55a
commit 40eaa80eb6
2 changed files with 18 additions and 11 deletions

View File

@@ -97,11 +97,15 @@ export namespace Trait {
export namespace Traits { export namespace Traits {
export type MapImplClass<T> = { export type MapImplClass<T> = {
[K in keyof T]: Trait.OwnImplClass<T[K]> [K in keyof T]: K extends keyof []
? T[K]
: Trait.OwnImplClass<T[K]>
} }
export type MapImplInstance<T> = { export type MapImplInstance<T> = {
[K in keyof T]: Trait.OwnImplInstance<T[K]> [K in keyof T]: K extends keyof []
? T[K]
: Trait.OwnImplInstance<T[K]>
} }
export type MapImplStaticMembers<T> = { export type MapImplStaticMembers<T> = {

View File

@@ -5,18 +5,25 @@ import { ExtendPlain, StaticMembers } from "./util"
type ImplSuper< type ImplSuper<
Supertraits extends Trait<any, any, any, any>[], SuperExpression extends TraitExpression<
typeof TraitExpression.NullSuperclass,
Trait<any, any, any, any>[]
>,
Abstract extends object, Abstract extends object,
StaticAbstract extends object, StaticAbstract extends object,
> = ( > = (
AbstractClass< AbstractClass<
ExtendPlain<[ ExtendPlain<[
...Traits.MapImplInstance<Supertraits>, ...Traits.MapImplInstance<
TraitExpression.Traits<SuperExpression>
>,
Abstract, Abstract,
]> ]>
> & > &
ExtendPlain<[ ExtendPlain<[
...Traits.MapImplStaticMembers<Supertraits>, ...Traits.MapImplStaticMembers<
TraitExpression.Traits<SuperExpression>
>,
StaticAbstract, StaticAbstract,
]> & ]> &
{ readonly _tag: "@thilawyn/traitify-ts/Super" } // TODO: replace with unique symbol? { readonly _tag: "@thilawyn/traitify-ts/Super" } // TODO: replace with unique symbol?
@@ -63,17 +70,13 @@ export class TraitBuilder<
implement< implement<
ImplClassWithAbstract extends ImplSuper< // TODO: use This instead? ImplClassWithAbstract extends ImplSuper< // TODO: use This instead?
TraitExpression.Traits<SuperExpression>, SuperExpression,
Abstract, Abstract,
StaticAbstract StaticAbstract
> >
>( >(
apply: ( apply: (
Super: ImplSuper< Super: ImplSuper<SuperExpression, Abstract, StaticAbstract>
TraitExpression.Traits<SuperExpression>,
Abstract,
StaticAbstract
>
) => ImplClassWithAbstract ) => ImplClassWithAbstract
) { ) {
return new TraitBuilder( return new TraitBuilder(