This commit is contained in:
@@ -15,11 +15,12 @@ export class TraitExpression<
|
||||
|
||||
get extends(): (
|
||||
AbstractClass<
|
||||
InstanceType<Superclass> & // Keep the instance of the superclass outside of any kind of type manipulation
|
||||
// as it can accidentely remove abstract properties
|
||||
Simplify<
|
||||
Extend<[
|
||||
InstanceType<Superclass>,
|
||||
...TraitTuple.MapImplInstance<Traits>,
|
||||
]>
|
||||
Extend<
|
||||
TraitTuple.MapImplInstance<Traits>
|
||||
>
|
||||
>,
|
||||
|
||||
ConstructorParameters<Superclass>
|
||||
@@ -140,11 +141,12 @@ export type TraitExpressionConcreteClass<
|
||||
export type TraitExpressionInstance<
|
||||
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<
|
||||
Extend<[
|
||||
InstanceType<TraitExpression.Superclass<Exp>>,
|
||||
...TraitTuple.MapInstance<TraitExpression.Traits<Exp>>,
|
||||
]>
|
||||
Extend<
|
||||
TraitTuple.MapInstance<TraitExpression.Traits<Exp>>
|
||||
>
|
||||
>
|
||||
)
|
||||
|
||||
|
||||
20
src/tests.ts
20
src/tests.ts
@@ -1,4 +1,4 @@
|
||||
import { Simplify } from "type-fest"
|
||||
import { AbstractClass, Simplify } from "type-fest"
|
||||
import { TraitClass } from "./Trait"
|
||||
import { trait } from "./TraitBuilder"
|
||||
import { Implements, ImplementsStatic, TraitExpressionClass } from "./TraitExpression"
|
||||
@@ -85,7 +85,17 @@ class User extends exp.extends implements Implements<typeof exp> {
|
||||
console.log(new User())
|
||||
|
||||
|
||||
type T = NonExtendableKeys<[
|
||||
{ prout: "gneugneu" },
|
||||
{ prout: string },
|
||||
]>
|
||||
abstract class Test {
|
||||
abstract prout: string
|
||||
}
|
||||
|
||||
const MappedTest = Test as AbstractClass<Test>
|
||||
|
||||
class ConcreteTest extends MappedTest {
|
||||
|
||||
}
|
||||
|
||||
// type T = NonExtendableKeys<[
|
||||
// { prout: "gneugneu" },
|
||||
// { prout: string },
|
||||
// ]>
|
||||
|
||||
Reference in New Issue
Block a user