This commit is contained in:
@@ -2,7 +2,30 @@ import { Fn, Pipe, Tuples } from "hotscript"
|
||||
import { AbstractClass, Class } from "type-fest"
|
||||
import { Trait } from "./Trait"
|
||||
import { TraitBuilder } from "./TraitBuilder"
|
||||
import { ExtendFn, SimplifyFn, StaticMembersFn } from "./util"
|
||||
import { ExtendFn, ExtendPlain, SimplifyFn, StaticMembersFn } from "./util"
|
||||
|
||||
|
||||
type SubtraitAbstract<Exp> = (
|
||||
ExtendPlain<
|
||||
MapTraitsToOwnAbstract<
|
||||
TraitExpression.Traits<Exp>
|
||||
>
|
||||
>
|
||||
)
|
||||
type MapTraitsToOwnAbstract<T extends readonly any[]> = {
|
||||
[K in keyof T]: Trait.OwnAbstract<T[K]>
|
||||
}
|
||||
|
||||
type SubtraitStaticAbstract<Exp> = (
|
||||
ExtendPlain<
|
||||
MapTraitsToOwnStaticAbstract<
|
||||
TraitExpression.Traits<Exp>
|
||||
>
|
||||
>
|
||||
)
|
||||
type MapTraitsToOwnStaticAbstract<T extends readonly any[]> = {
|
||||
[K in keyof T]: Trait.OwnStaticAbstract<T[K]>
|
||||
}
|
||||
|
||||
|
||||
export class TraitExpression<
|
||||
@@ -49,8 +72,8 @@ export class TraitExpression<
|
||||
) {
|
||||
return new TraitBuilder(
|
||||
this,
|
||||
{},
|
||||
{},
|
||||
{} as SubtraitAbstract<This>,
|
||||
{} as SubtraitStaticAbstract<This>,
|
||||
Super => class extends Super {},
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user