This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { Call, Fn, Pipe, Tuples } from "hotscript"
|
||||
import { Call, ComposeLeft, Fn, Pipe, Tuples } from "hotscript"
|
||||
import { AbstractClass, Class, Opaque } from "type-fest"
|
||||
import { AbstractTag, Trait, TraitAbstractFn, TraitApplierSuperTag, TraitOwnAbstractFn, TraitOwnImplClassFn, TraitOwnImplInstanceFn, TraitSupertraitsFn } from "."
|
||||
import { AbstractTag, Trait, TraitApplierSuperTag, TraitOwnAbstractFn, TraitOwnImplClassFn, TraitOwnImplInstanceFn, TraitSupertraitsFn } from "."
|
||||
import { ExtendFn, ExtendableFn, SimplifyFn, StaticMembersFn } from "./util"
|
||||
|
||||
|
||||
@@ -48,10 +48,10 @@ export class TraitExpression<
|
||||
SubtraitImplWithAbstract extends Class<{}>,
|
||||
>(
|
||||
abstract: (
|
||||
abstract: Pipe<Traits, [
|
||||
Tuples.Map<TraitOwnAbstractFn>,
|
||||
SimplifyFn,
|
||||
]>
|
||||
abstract: Call<
|
||||
ComposeLeft<[TraitExpressionAbstractFn, SimplifyFn]>,
|
||||
typeof this
|
||||
>
|
||||
) => Opaque<SubtraitAbstract, AbstractTag>,
|
||||
|
||||
// impl: ()
|
||||
@@ -77,33 +77,15 @@ export interface TraitExpressionTraitsFn extends Fn {
|
||||
}
|
||||
|
||||
export interface TraitExpressionAbstractFn extends Fn {
|
||||
return: this["arg0"] extends TraitExpression<any, infer Traits>
|
||||
? Pipe<Traits, [
|
||||
TraitAbstractFn,
|
||||
return: this["arg0"] extends TraitExpression<any, any>
|
||||
? Pipe<this["arg0"], [
|
||||
TraitExpressionTraitsFn,
|
||||
Tuples.Map<TraitOwnAbstractFn>,
|
||||
ExtendFn,
|
||||
]>
|
||||
: never
|
||||
}
|
||||
|
||||
export interface TraitExpressionInstanceFn extends Fn {
|
||||
return: this["arg0"] extends TraitExpression<infer Super, infer Traits>
|
||||
? Pipe<Traits, [
|
||||
TraitAbstractFn,
|
||||
ExtendFn,
|
||||
]>
|
||||
: never
|
||||
}
|
||||
|
||||
export interface TraitExpressionStaticFn extends Fn {
|
||||
return: this["arg0"] extends TraitExpression<infer Super, infer Traits>
|
||||
? Pipe<Traits, [
|
||||
TraitAbstractFn,
|
||||
ExtendFn,
|
||||
]>
|
||||
: never
|
||||
}
|
||||
|
||||
|
||||
export type Implements<Exp extends TraitExpression<any, any>> = (
|
||||
Exp extends TraitExpression<any, infer Traits>
|
||||
? Pipe<Traits, [
|
||||
|
||||
Reference in New Issue
Block a user