Files
thilatrait/src/tests.ts
Julien Valverdé 13c2113aa2
All checks were successful
continuous-integration/drone/push Build is passing
Updated comments
2023-12-29 00:22:59 +01:00

63 lines
1.3 KiB
TypeScript

import { expresses, trait } from "."
const Identifiable = <ID>() =>
trait(Parent => {
abstract class Identifiable extends Parent {
abstract readonly id: ID
equals(el: Identifiable) {
return this.id === el.id
}
constructor(...args: any[]) {
super(...args)
console.log("Identified constructor")
}
}
return Identifiable
})
const ImplementsIdentifiable = <ID>(defaultID: ID) =>
trait(Parent => {
abstract class ImplementsIdentifiable extends Identifiable<ID>()(Parent) {
id: ID = defaultID
}
return ImplementsIdentifiable
})
const Permissible = trait(Parent => {
abstract class Permissible extends Parent {
static readonly defaultPermissions: string[] = []
permissions: string[] = []
constructor(...args: any[]) {
super(...args)
console.log("Permissible constructor")
}
}
return Permissible
})
const UserProto = expresses(
// Identifiable<bigint>(),
ImplementsIdentifiable(0n),
Permissible,
)
class User extends UserProto {
constructor(id: bigint) {
super()
this.id = id
}
}
const user1 = new User(1n)
console.log(user1)
console.log(user1.equals(user1))