Files
traitify-ts/src/tests.ts
Julien Valverdé 781567a3bd
Some checks failed
continuous-integration/drone/push Build is failing
TraitExpressionTraitsFn
2024-02-04 02:53:47 +01:00

69 lines
1.7 KiB
TypeScript

import { Call } from "hotscript"
import { Implements, TraitExpressionTraitsFn, abstract, expression, trait } from "."
const PrintsHelloOnNew = trait(
abstract(),
Super => class PrintsHelloOnNew extends Super {
constructor(...args: any[]) {
super(...args)
console.log("Hello!")
}
},
)
const Identifiable = <ID>() => trait(
abstract<{ readonly id: ID }>(),
Super => class Identifiable extends Super {
equals(el: Identifiable) {
return this.id === el.id
}
},
)
const StatefulSubscription = trait(
abstract<{
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(
// abstract<ActiveStatefulSubscriptionAbstractMembers>(),
// Super => class ActiveStatefulSubscription extends Super {},
// )
class TestSuperclass {
// id: number = 69
// static test = 69
}
const builder = expression
.extends(TestSuperclass)
.expresses(
PrintsHelloOnNew,
Identifiable<bigint>(),
// Identifiable<number>(),
StatefulSubscription,
)
const exp = builder.get()
type Abs = Call<TraitExpressionTraitsFn, typeof exp>
class User extends exp.extends implements Implements<typeof exp> {
id: bigint = -1n
}
console.log(new User())