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 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> = {
[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> = {

View File

@@ -5,18 +5,25 @@ import { ExtendPlain, StaticMembers } from "./util"
type ImplSuper<
Supertraits extends Trait<any, any, any, any>[],
SuperExpression extends TraitExpression<
typeof TraitExpression.NullSuperclass,
Trait<any, any, any, any>[]
>,
Abstract extends object,
StaticAbstract extends object,
> = (
AbstractClass<
ExtendPlain<[
...Traits.MapImplInstance<Supertraits>,
...Traits.MapImplInstance<
TraitExpression.Traits<SuperExpression>
>,
Abstract,
]>
> &
ExtendPlain<[
...Traits.MapImplStaticMembers<Supertraits>,
...Traits.MapImplStaticMembers<
TraitExpression.Traits<SuperExpression>
>,
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>,
SuperExpression,
Abstract,
StaticAbstract
>
>(
apply: (
Super: ImplSuper<
TraitExpression.Traits<SuperExpression>,
Abstract,
StaticAbstract
>
Super: ImplSuper<SuperExpression, Abstract, StaticAbstract>
) => ImplClassWithAbstract
) {
return new TraitBuilder(