Expresses work

This commit is contained in:
Julien Valverdé
2024-01-28 22:52:32 +01:00
parent 096d4a92e7
commit 8b01a13d7c
4 changed files with 84 additions and 83 deletions

View File

@@ -1,14 +1,20 @@
import { Trait, TraitClass } from ".."
import { Trait, TraitAbstractMembers, TraitClass } from ".."
/**
* Represents an array of classes corresponding to the provided traits.
* @template Traits - An array of traits extending Trait<any>.
*/
export type TraitsClasses<Traits extends readonly Trait<any>[]> = (
export type TraitsAbstractMembers<Traits extends readonly Trait<any, any>[]> = (
Traits extends [infer T, ...infer Rest]
? T extends Trait<any>
? Rest extends Trait<any>[]
? 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