TraitExpression work
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-02-15 21:00:12 +01:00
parent e928a11ee4
commit fe667e87fe
2 changed files with 16 additions and 8 deletions

View File

@@ -5,7 +5,7 @@ import { TraitExpression } from "./TraitExpression"
import { ExtendFn, SimplifyFn, StaticMembers } from "./util" import { ExtendFn, SimplifyFn, StaticMembers } from "./util"
type SuperAbstract<SuperExpression, Abstract> = ( type ExtendAbstractSuper<SuperExpression, Abstract> = (
Pipe<SuperExpression, [ Pipe<SuperExpression, [
TraitExpression.TraitsFn, TraitExpression.TraitsFn,
Tuples.Map<Trait.OwnAbstractFn>, Tuples.Map<Trait.OwnAbstractFn>,
@@ -15,7 +15,7 @@ type SuperAbstract<SuperExpression, Abstract> = (
]> ]>
) )
type SuperStaticAbstract<SuperExpression, StaticAbstract> = ( type ExtendStaticAbstractSuper<SuperExpression, StaticAbstract> = (
Pipe<SuperExpression, [ Pipe<SuperExpression, [
TraitExpression.TraitsFn, TraitExpression.TraitsFn,
Tuples.Map<Trait.OwnStaticAbstractFn>, Tuples.Map<Trait.OwnStaticAbstractFn>,
@@ -61,7 +61,7 @@ export class TraitBuilder<
private readonly traitApply: (Super: AbstractClass<object>) => ImplClass, private readonly traitApply: (Super: AbstractClass<object>) => ImplClass,
) {} ) {}
abstract<A extends SuperAbstract<SuperExpression, Abstract>>() { abstract<A extends ExtendAbstractSuper<SuperExpression, Abstract>>() {
return new TraitBuilder( return new TraitBuilder(
this.traitSuperExpression, this.traitSuperExpression,
{} as A, {} as A,
@@ -70,10 +70,10 @@ export class TraitBuilder<
) )
} }
extendAbstract<A extends SuperAbstract<SuperExpression, Abstract>>( extendAbstract<A extends ExtendAbstractSuper<SuperExpression, Abstract>>(
_: ( _: (
Super: AbstractClass< Super: AbstractClass<
SuperAbstract<SuperExpression, Abstract> ExtendAbstractSuper<SuperExpression, Abstract>
> >
) => AbstractClass<A, []> ) => AbstractClass<A, []>
) { ) {
@@ -85,7 +85,7 @@ export class TraitBuilder<
) )
} }
staticAbstract<A extends SuperStaticAbstract<SuperExpression, StaticAbstract>>() { staticAbstract<A extends ExtendStaticAbstractSuper<SuperExpression, StaticAbstract>>() {
return new TraitBuilder( return new TraitBuilder(
this.traitSuperExpression, this.traitSuperExpression,
this.traitAbstract, this.traitAbstract,
@@ -94,9 +94,9 @@ export class TraitBuilder<
) )
} }
extendStaticAbstract<A extends SuperStaticAbstract<SuperExpression, StaticAbstract>>( extendStaticAbstract<A extends ExtendStaticAbstractSuper<SuperExpression, StaticAbstract>>(
_: (Super: AbstractClass< _: (Super: AbstractClass<
SuperStaticAbstract<SuperExpression, StaticAbstract> ExtendStaticAbstractSuper<SuperExpression, StaticAbstract>
>) => AbstractClass<A, []> >) => AbstractClass<A, []>
) { ) {
return new TraitBuilder( return new TraitBuilder(

View File

@@ -98,3 +98,11 @@ export type ImplementsStatic<Exp extends TraitExpression<any, any>> = (
SimplifyFn, SimplifyFn,
]> ]>
) )
export type TraitExpressionClass<Exp extends TraitExpression<any, any>> = (
)
export type TraitExpressionInstance<Exp extends TraitExpression<any, any>> = (
)