Trait refactoring
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-02-04 18:10:00 +01:00
parent 74029493e8
commit 26daee364d

View File

@@ -39,42 +39,52 @@ export class Trait<
) {} ) {}
} }
export interface TraitOwnAbstractFn extends Fn { export type TraitOwnAbstract<T> = (
return: this["arg0"] extends Trait<any, infer Abstract, any> T extends Trait<any, infer Abstract, any>
? Abstract ? Abstract
: never : never
)
export interface TraitOwnAbstractFn extends Fn {
return: TraitOwnAbstract<this["arg0"]>
} }
export type TraitOwnAbstract<T> = Call<TraitOwnAbstractFn, T>
export interface TraitOwnImplClassFn extends Fn { export type TraitOwnImplClass<T> = (
return: this["arg0"] extends Trait<any, any, infer ImplClass> T extends Trait<any, any, infer ImplClass>
? ImplClass ? ImplClass
: never : never
)
export interface TraitOwnImplClassFn extends Fn {
return: TraitOwnImplClass<this["arg0"]>
} }
export type TraitOwnImplClass<T> = Call<TraitOwnImplClassFn, T>
export interface TraitOwnImplInstanceFn extends Fn { export type TraitOwnImplInstance<T> = (
return: this["arg0"] extends Trait<any, any, infer ImplClass> T extends Trait<any, any, infer ImplClass>
? InstanceType<ImplClass> ? InstanceType<ImplClass>
: never : never
)
export interface TraitOwnImplInstanceFn extends Fn {
return: TraitOwnImplInstance<this["arg0"]>
} }
export type TraitOwnImplInstance<T> = Call<TraitOwnImplInstanceFn, T>
export interface TraitOwnClassFn extends Fn { export type TraitOwnClass<T> = (
return: this["arg0"] extends Trait<any, infer Abstract, infer ImplClass> T extends Trait<any, infer Abstract, infer ImplClass>
? AddAbstractToImplClass<ImplClass, Abstract> ? AddAbstractToImplClass<ImplClass, Abstract>
: never : never
)
export interface TraitOwnClassFn extends Fn {
return: TraitOwnClass<this["arg0"]>
} }
export type TraitOwnClass<T> = Call<TraitOwnClassFn, T>
export interface TraitOwnInstanceFn extends Fn { export type TraitOwnInstance<T> = (
return: this["arg0"] extends Trait<any, infer Abstract, infer ImplClass> T extends Trait<any, infer Abstract, infer ImplClass>
? InstanceType< ? InstanceType<
AddAbstractToImplClass<ImplClass, Abstract> AddAbstractToImplClass<ImplClass, Abstract>
> >
: never : never
)
export interface TraitOwnInstanceFn extends Fn {
return: TraitOwnInstance<this["arg0"]>
} }
export type TraitOwnInstance<T> = Call<TraitOwnInstanceFn, T>
export interface TraitSupertraitsFn extends Fn { export interface TraitSupertraitsFn extends Fn {