Compare commits
2 Commits
d9213e0083
...
50e360d7ff
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
50e360d7ff | ||
|
|
94c4307ad2 |
@@ -1,4 +1,3 @@
|
|||||||
import { Call, Fn, Tuples } from "hotscript"
|
|
||||||
import { uniq } from "lodash-es"
|
import { uniq } from "lodash-es"
|
||||||
import { AbstractClass } from "type-fest"
|
import { AbstractClass } from "type-fest"
|
||||||
import { Trait, TraitTuple } from "./Trait"
|
import { Trait, TraitTuple } from "./Trait"
|
||||||
@@ -6,15 +5,15 @@ import { TraitExpression } from "./TraitExpression"
|
|||||||
import { Extendable, StaticMembers } from "./util"
|
import { Extendable, StaticMembers } from "./util"
|
||||||
|
|
||||||
|
|
||||||
type SpreadSupertraits<Traits extends Trait<any, any, any, any>[]> = (
|
type SpreadSupertraits<T> = (
|
||||||
Call<
|
T extends [infer Trait, ...infer Rest]
|
||||||
Tuples.FlatMap<PrependTraitSupertraitsFn>,
|
? [
|
||||||
Traits
|
...Trait.Supertraits<Trait>,
|
||||||
>
|
Trait,
|
||||||
|
...SpreadSupertraits<Rest>,
|
||||||
|
]
|
||||||
|
: []
|
||||||
)
|
)
|
||||||
interface PrependTraitSupertraitsFn extends Fn {
|
|
||||||
return: [...Trait.Supertraits<this["arg0"]>, this["arg0"]]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
type InstanceExtendable<
|
type InstanceExtendable<
|
||||||
@@ -81,10 +80,7 @@ class TraitExpressionBuilder<
|
|||||||
>[]
|
>[]
|
||||||
>(
|
>(
|
||||||
...traits: T
|
...traits: T
|
||||||
): TraitExpressionBuilder<
|
) {
|
||||||
Superclass,
|
|
||||||
[...Traits, ...SpreadSupertraits<T>]
|
|
||||||
> {
|
|
||||||
return new TraitExpressionBuilder(
|
return new TraitExpressionBuilder(
|
||||||
this.expressionSuperclass,
|
this.expressionSuperclass,
|
||||||
|
|
||||||
|
|||||||
12
src/tests.ts
12
src/tests.ts
@@ -1,9 +1,7 @@
|
|||||||
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"
|
||||||
import { expression } from "./TraitExpressionBuilder"
|
import { expression } from "./TraitExpressionBuilder"
|
||||||
import { Extendable, NonExtendableKeys } from "./util"
|
|
||||||
|
|
||||||
|
|
||||||
const PrintsHelloOnNew = trait
|
const PrintsHelloOnNew = trait
|
||||||
@@ -85,16 +83,6 @@ class User extends exp.extends implements Implements<typeof exp> {
|
|||||||
console.log(new User())
|
console.log(new User())
|
||||||
|
|
||||||
|
|
||||||
abstract class Test {
|
|
||||||
abstract prout: string
|
|
||||||
}
|
|
||||||
|
|
||||||
const MappedTest = Test as AbstractClass<Test>
|
|
||||||
|
|
||||||
class ConcreteTest extends MappedTest {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// type T = NonExtendableKeys<[
|
// type T = NonExtendableKeys<[
|
||||||
// { prout: "gneugneu" },
|
// { prout: "gneugneu" },
|
||||||
// { prout: string },
|
// { prout: string },
|
||||||
|
|||||||
Reference in New Issue
Block a user