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 { AbstractClass } from "type-fest"
|
||||
import { Trait, TraitTuple } from "./Trait"
|
||||
@@ -6,15 +5,15 @@ import { TraitExpression } from "./TraitExpression"
|
||||
import { Extendable, StaticMembers } from "./util"
|
||||
|
||||
|
||||
type SpreadSupertraits<Traits extends Trait<any, any, any, any>[]> = (
|
||||
Call<
|
||||
Tuples.FlatMap<PrependTraitSupertraitsFn>,
|
||||
Traits
|
||||
>
|
||||
type SpreadSupertraits<T> = (
|
||||
T extends [infer Trait, ...infer Rest]
|
||||
? [
|
||||
...Trait.Supertraits<Trait>,
|
||||
Trait,
|
||||
...SpreadSupertraits<Rest>,
|
||||
]
|
||||
: []
|
||||
)
|
||||
interface PrependTraitSupertraitsFn extends Fn {
|
||||
return: [...Trait.Supertraits<this["arg0"]>, this["arg0"]]
|
||||
}
|
||||
|
||||
|
||||
type InstanceExtendable<
|
||||
@@ -81,10 +80,7 @@ class TraitExpressionBuilder<
|
||||
>[]
|
||||
>(
|
||||
...traits: T
|
||||
): TraitExpressionBuilder<
|
||||
Superclass,
|
||||
[...Traits, ...SpreadSupertraits<T>]
|
||||
> {
|
||||
) {
|
||||
return new TraitExpressionBuilder(
|
||||
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 { trait } from "./TraitBuilder"
|
||||
import { Implements, ImplementsStatic, TraitExpressionClass } from "./TraitExpression"
|
||||
import { expression } from "./TraitExpressionBuilder"
|
||||
import { Extendable, NonExtendableKeys } from "./util"
|
||||
|
||||
|
||||
const PrintsHelloOnNew = trait
|
||||
@@ -85,16 +83,6 @@ class User extends exp.extends implements Implements<typeof exp> {
|
||||
console.log(new User())
|
||||
|
||||
|
||||
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