This commit is contained in:
@@ -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>>,
|
>
|
||||||
]>
|
|
||||||
>
|
>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
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 { 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 },
|
||||||
|
// ]>
|
||||||
|
|||||||
Reference in New Issue
Block a user