Files
zod-schema-class/src/tests.ts
Julien Valverdé ab2ee2d361 Initial files
2023-12-30 01:07:23 +01:00

71 lines
1.5 KiB
TypeScript

import { expresses, extendsAndExpresses, 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 extendsAndExpresses(
Parent,
[Identifiable<ID>()],
) {
id: ID = defaultID
constructor(...args: any[]) {
super(...args)
console.log("ImplementsIdentifiable constructor")
}
}
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))