Files
traitify-ts/src/tests.ts
Julien Valverdé 48f5f44d8f Tests
2024-02-01 04:11:53 +01:00

65 lines
1.5 KiB
TypeScript

import { Implements, TraitAbstractMembers, extendsAndExpresses, trait } from "."
const PrintsHelloOnNew = trait()(Super =>
class PrintsHelloOnNew extends Super {
constructor(...args: any[]) {
super(...args)
console.log("Hello!")
}
}
)
const Identifiable = <ID>() => (
trait<{ readonly id: ID }>()(Super =>
class Identifiable extends Super {
equals(el: Identifiable) {
return this.id === el.id
}
}
)
)
const StatefulSubscription = trait<{
readonly status: (
{ _tag: "awaitingPayment" } |
{ _tag: "active", activeSince: Date, expiresAt?: Date } |
{ _tag: "expired", expiredSince: Date }
)
}>()(Super =>
class StatefulSubscription extends Super {}
)
interface ActiveStatefulSubscriptionAbstractMembers extends TraitAbstractMembers<typeof StatefulSubscription> {
readonly status: { _tag: "active", activeSince: Date, expiresAt?: Date }
}
const ActiveStatefulSubscription = trait<ActiveStatefulSubscriptionAbstractMembers>()(Super =>
class ActiveStatefulSubscription extends Super {}
)
// type Test2 = Simplify<MergeInheritanceTree<Test1>>
class TestSuperclass {
// id: number = 69
static test = 69
}
const User = extendsAndExpresses(
TestSuperclass,
PrintsHelloOnNew,
Identifiable<bigint>(),
// Identifiable<number>()
).then(e =>
class User
extends e.extends()
implements Implements<typeof e> {
id: bigint = -1n
}
)
console.log(new User())