This commit is contained in:
@@ -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]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
24
src/tests.ts
24
src/tests.ts
@@ -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]>
|
|
||||||
|
|||||||
Reference in New Issue
Block a user