Working trait expression implements
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
import { Call, Fn, Tuples } from "hotscript"
|
||||
|
||||
|
||||
type CommonKeys<A, B> = Extract<keyof A, keyof B>
|
||||
|
||||
type ExtendReducer<Super, Self> = (
|
||||
Pick<Self, CommonKeys<Self, Super>> extends Pick<Super, CommonKeys<Self, Super>>
|
||||
? Omit<Super, CommonKeys<Self, Super>> & Self
|
||||
: never
|
||||
)
|
||||
interface ExtendReducerFn extends Fn {
|
||||
return: ExtendReducer<this["arg0"], this["arg1"]>
|
||||
}
|
||||
|
||||
export type ExtendFn = Tuples.Reduce<ExtendReducerFn, {}>
|
||||
export type Extend<T extends readonly object[]> = Call<ExtendFn, T>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
export * from "./class"
|
||||
export * from "./extend"
|
||||
export * from "./inheritance"
|
||||
export * from "./trait"
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
import { Trait, TraitAbstractMembers, TraitClass } from ".."
|
||||
|
||||
|
||||
export type TraitsAbstractMembers<Traits extends readonly Trait<any, any>[]> = (
|
||||
Traits extends [infer T, ...infer Rest]
|
||||
? T extends Trait<any, any>
|
||||
? Rest extends Trait<any, any>[]
|
||||
? [TraitAbstractMembers<T>, ...TraitsClasses<Rest>]
|
||||
: never
|
||||
: never
|
||||
: []
|
||||
)
|
||||
|
||||
export type TraitsClasses<Traits extends readonly Trait<any, any>[]> = (
|
||||
Traits extends [infer T, ...infer Rest]
|
||||
? T extends Trait<any, any>
|
||||
? Rest extends Trait<any, any>[]
|
||||
? [TraitClass<T>, ...TraitsClasses<Rest>]
|
||||
: never
|
||||
: never
|
||||
: []
|
||||
)
|
||||
Reference in New Issue
Block a user