This commit is contained in:
@@ -7,12 +7,12 @@ import { ExtendFn, SimplifyFn, StaticMembersFn } from "./util"
|
|||||||
export class TraitExpressionNullSuperclass {}
|
export class TraitExpressionNullSuperclass {}
|
||||||
|
|
||||||
export class TraitExpression<
|
export class TraitExpression<
|
||||||
Super 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>[],
|
||||||
> {
|
> {
|
||||||
constructor(
|
constructor(
|
||||||
readonly superclass: Super,
|
readonly superclass: Superclass,
|
||||||
readonly ownTraits: OwnTraits,
|
readonly ownTraits: OwnTraits,
|
||||||
readonly allTraits: AllTraits,
|
readonly allTraits: AllTraits,
|
||||||
) {}
|
) {}
|
||||||
@@ -20,18 +20,18 @@ export class TraitExpression<
|
|||||||
get extends(): (
|
get extends(): (
|
||||||
AbstractClass<
|
AbstractClass<
|
||||||
Pipe<[
|
Pipe<[
|
||||||
InstanceType<Super>,
|
InstanceType<Superclass>,
|
||||||
...Call<Tuples.Map<Trait.OwnImplInstanceFn>, OwnTraits>,
|
...Call<Tuples.Map<Trait.OwnImplInstanceFn>, OwnTraits>,
|
||||||
], [
|
], [
|
||||||
ExtendFn,
|
ExtendFn,
|
||||||
SimplifyFn,
|
SimplifyFn,
|
||||||
]>,
|
]>,
|
||||||
|
|
||||||
ConstructorParameters<Super>
|
ConstructorParameters<Superclass>
|
||||||
> &
|
> &
|
||||||
|
|
||||||
Pipe<[
|
Pipe<[
|
||||||
Super,
|
Superclass,
|
||||||
...Call<Tuples.Map<Trait.OwnImplClassFn>, OwnTraits>,
|
...Call<Tuples.Map<Trait.OwnImplClassFn>, OwnTraits>,
|
||||||
], [
|
], [
|
||||||
Tuples.Map<StaticMembersFn>,
|
Tuples.Map<StaticMembersFn>,
|
||||||
@@ -41,7 +41,7 @@ export class TraitExpression<
|
|||||||
) {
|
) {
|
||||||
return this.allTraits.reduce(
|
return this.allTraits.reduce(
|
||||||
(previous, trait) => trait.apply(previous),
|
(previous, trait) => trait.apply(previous),
|
||||||
this.superclass as Opaque<Super, TraitApplierSuperTag>,
|
this.superclass as Opaque<Superclass, TraitApplierSuperTag>,
|
||||||
) as any
|
) as any
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,13 +62,13 @@ export class TraitExpression<
|
|||||||
}
|
}
|
||||||
|
|
||||||
export namespace TraitExpression {
|
export namespace TraitExpression {
|
||||||
export type Super<T> = (
|
export type Superclass<T> = (
|
||||||
T extends TraitExpression<infer Super, any, any>
|
T extends TraitExpression<infer Superclass, any, any>
|
||||||
? Super
|
? Superclass
|
||||||
: never
|
: never
|
||||||
)
|
)
|
||||||
export interface SuperFn extends Fn {
|
export interface SuperclassFn extends Fn {
|
||||||
return: TraitExpression.Super<this["arg0"]>
|
return: TraitExpression.Superclass<this["arg0"]>
|
||||||
}
|
}
|
||||||
|
|
||||||
export type OwnTraits<T> = (
|
export type OwnTraits<T> = (
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Implements, Trait, abstract, expression, trait } from "."
|
import { Implements, Trait, TraitExpression, abstract, expression, trait } from "."
|
||||||
|
|
||||||
|
|
||||||
const PrintsHelloOnNew = trait(
|
const PrintsHelloOnNew = trait(
|
||||||
@@ -57,6 +57,8 @@ const builder = expression
|
|||||||
StatefulSubscription,
|
StatefulSubscription,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type T = TraitExpression.OwnTraits<typeof builder.expression>
|
||||||
|
|
||||||
const exp = builder.get()
|
const exp = builder.get()
|
||||||
type Abs = Implements<typeof exp>
|
type Abs = Implements<typeof exp>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user