Found working approach
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-02-18 04:10:20 +01:00
parent 45ec2dd0e3
commit 517792b1c2
2 changed files with 18 additions and 12 deletions

View File

@@ -68,10 +68,8 @@ type MapTraitsToOwnImplInstance<T extends readonly any[]> = {
type MapTraitsToOwnImplStaticMembers<T extends readonly any[]> = { type MapTraitsToOwnImplStaticMembers<T extends readonly any[]> = {
[K in keyof T]: Trait.OwnImplClass<T[K]> [K in keyof T]: Trait.OwnImplClass<T[K]>
} }
type MapStaticMembers<Tuple extends readonly AbstractClass<any>[]> = { type MapStaticMembers<T extends readonly AbstractClass<any>[]> = {
[TupleK in keyof Tuple]: { [K in keyof T]: StaticMembers<T[K]>
[ClassK in keyof Tuple[TupleK]]: Tuple[TupleK][ClassK]
}
} }

View File

@@ -84,19 +84,27 @@ class User extends exp.extends implements Implements<typeof exp> {
console.log(new User()) console.log(new User())
type ExpectsObjectArray<T extends readonly object[]> = T type ExpectObjectArray<T extends readonly object[]> = T
type MapOwnImplClass<T extends readonly any[]> = {
[K in keyof T]: Trait.OwnImplClass<T[K]>
}
type MapStaticMembers<T extends readonly any[]> = { type MapStaticMembers<T extends readonly any[]> = {
[K in keyof T]: StaticMembers<T[K]> [K in keyof T]: StaticMembers<T[K]>
} }
type MapClasses<Classes extends AbstractClass<any>[]> = (
ExpectsObjectArray< type MapClasses<Exp> = (
MapStaticMembers< Exp extends TraitExpression<any, infer Traits>
Classes ? ExpectObjectArray<
MapStaticMembers<
MapOwnImplClass<
Traits
>
>
> >
> : never
) )
type Output = MapClasses<typeof exp>
type Output = MapClasses<[typeof User]>