0.1.4 #4

Merged
Thilawyn merged 68 commits from next into master 2024-02-20 01:39:38 +01:00
2 changed files with 18 additions and 11 deletions
Showing only changes of commit 40eaa80eb6 - Show all commits

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(