TraitExpression fix
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-02-19 22:41:20 +01:00
parent df7e7f3401
commit d9213e0083
2 changed files with 25 additions and 13 deletions

View File

@@ -15,11 +15,12 @@ export class TraitExpression<
get extends(): ( get extends(): (
AbstractClass< AbstractClass<
InstanceType<Superclass> & // Keep the instance of the superclass outside of any kind of type manipulation
// as it can accidentely remove abstract properties
Simplify< Simplify<
Extend<[ Extend<
InstanceType<Superclass>, TraitTuple.MapImplInstance<Traits>
...TraitTuple.MapImplInstance<Traits>, >
]>
>, >,
ConstructorParameters<Superclass> ConstructorParameters<Superclass>
@@ -140,11 +141,12 @@ export type TraitExpressionConcreteClass<
export type TraitExpressionInstance< export type TraitExpressionInstance<
Exp extends TraitExpression<any, Trait<any, any, any, any>[]> Exp extends TraitExpression<any, Trait<any, any, any, any>[]>
> = ( > = (
InstanceType<TraitExpression.Superclass<Exp>> & // Keep the instance of the superclass outside of any kind of type manipulation
// as it can accidentely remove abstract properties
Simplify< Simplify<
Extend<[ Extend<
InstanceType<TraitExpression.Superclass<Exp>>, TraitTuple.MapInstance<TraitExpression.Traits<Exp>>
...TraitTuple.MapInstance<TraitExpression.Traits<Exp>>, >
]>
> >
) )

View File

@@ -1,4 +1,4 @@
import { Simplify } from "type-fest" import { AbstractClass, Simplify } from "type-fest"
import { TraitClass } from "./Trait" import { TraitClass } from "./Trait"
import { trait } from "./TraitBuilder" import { trait } from "./TraitBuilder"
import { Implements, ImplementsStatic, TraitExpressionClass } from "./TraitExpression" import { Implements, ImplementsStatic, TraitExpressionClass } from "./TraitExpression"
@@ -85,7 +85,17 @@ class User extends exp.extends implements Implements<typeof exp> {
console.log(new User()) console.log(new User())
type T = NonExtendableKeys<[ abstract class Test {
{ prout: "gneugneu" }, abstract prout: string
{ prout: string }, }
]>
const MappedTest = Test as AbstractClass<Test>
class ConcreteTest extends MappedTest {
}
// type T = NonExtendableKeys<[
// { prout: "gneugneu" },
// { prout: string },
// ]>