This commit is contained in:
@@ -12,8 +12,10 @@ class TraitExpressionBuilder<
|
|||||||
constructor(private expression: TraitExpression<Super, OwnTraits, AllTraits>) {}
|
constructor(private expression: TraitExpression<Super, OwnTraits, AllTraits>) {}
|
||||||
|
|
||||||
extends<
|
extends<
|
||||||
NewSuper extends AbstractClass<any>
|
Super extends AbstractClass<any>
|
||||||
>(superclass: NewSuper) {
|
>(
|
||||||
|
superclass: Super
|
||||||
|
) {
|
||||||
return new TraitExpressionBuilder(
|
return new TraitExpressionBuilder(
|
||||||
new TraitExpression(
|
new TraitExpression(
|
||||||
superclass,
|
superclass,
|
||||||
@@ -56,12 +58,12 @@ class TraitExpressionBuilder<
|
|||||||
]) as SpreadSupertraits<Traits>
|
]) as SpreadSupertraits<Traits>
|
||||||
}
|
}
|
||||||
|
|
||||||
get() {
|
build() {
|
||||||
return this.expression as GetTraitExpression<Super, OwnTraits, AllTraits>
|
return this.expression as BuildTraitExpression<Super, OwnTraits, AllTraits>
|
||||||
}
|
}
|
||||||
|
|
||||||
then<V>(fn: (expression: ReturnType<typeof this.get>) => V): V {
|
then<V>(fn: (expression: ReturnType<typeof this.build>) => V): V {
|
||||||
return fn(this.get())
|
return fn(this.build())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +112,7 @@ type ImplStaticMembersExtendable<
|
|||||||
]>
|
]>
|
||||||
)
|
)
|
||||||
|
|
||||||
type GetTraitExpression<
|
type BuildTraitExpression<
|
||||||
Superclass extends AbstractClass<{}>,
|
Superclass extends AbstractClass<{}>,
|
||||||
OwnTraits extends Trait<any, any, any>[],
|
OwnTraits extends Trait<any, any, any>[],
|
||||||
AllTraits extends Trait<any, any, any>[],
|
AllTraits extends Trait<any, any, any>[],
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class TestSuperclass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const builder = expression
|
const exp = expression
|
||||||
.extends(TestSuperclass)
|
.extends(TestSuperclass)
|
||||||
.expresses(
|
.expresses(
|
||||||
PrintsHelloOnNew,
|
PrintsHelloOnNew,
|
||||||
@@ -56,8 +56,8 @@ const builder = expression
|
|||||||
// Identifiable<number>(),
|
// Identifiable<number>(),
|
||||||
StatefulSubscription,
|
StatefulSubscription,
|
||||||
)
|
)
|
||||||
|
.build()
|
||||||
|
|
||||||
const exp = builder.get()
|
|
||||||
type Abs = Implements<typeof exp>
|
type Abs = Implements<typeof exp>
|
||||||
|
|
||||||
// exp.subtrait(
|
// exp.subtrait(
|
||||||
|
|||||||
Reference in New Issue
Block a user