This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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>> = (
|
||||||
|
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user