0.1.2 #9
38
src/tests.ts
38
src/tests.ts
@@ -4,8 +4,8 @@ import { ClassesInstances, MergeInheritanceTree } from "./util"
|
||||
|
||||
|
||||
const Identifiable = <ID>() =>
|
||||
trait(Parent => {
|
||||
abstract class Identifiable extends Parent {
|
||||
trait(Super => {
|
||||
abstract class Identifiable extends Super {
|
||||
abstract readonly id: ID
|
||||
|
||||
equals(el: Identifiable) {
|
||||
@@ -22,9 +22,9 @@ const Identifiable = <ID>() =>
|
||||
})
|
||||
|
||||
const ImplementsIdentifiable = <ID>(defaultID: ID) =>
|
||||
trait(Parent => {
|
||||
trait(Super => {
|
||||
abstract class ImplementsIdentifiable extends extendsAndExpresses(
|
||||
Parent,
|
||||
Super,
|
||||
Identifiable<ID>(),
|
||||
) {
|
||||
id: ID = defaultID
|
||||
@@ -39,8 +39,8 @@ const ImplementsIdentifiable = <ID>(defaultID: ID) =>
|
||||
})
|
||||
|
||||
|
||||
const Permissible = trait(Parent => {
|
||||
abstract class Permissible extends Parent {
|
||||
const Permissible = trait(Super => {
|
||||
abstract class Permissible extends Super {
|
||||
static readonly defaultPermissions: string[] = []
|
||||
permissions: string[] = []
|
||||
|
||||
@@ -72,8 +72,14 @@ console.log(user1)
|
||||
console.log(user1.equals(user1))
|
||||
|
||||
|
||||
abstract class Test1 {
|
||||
const Test1 = trait(Super => {
|
||||
abstract class Test1 extends Super {
|
||||
declare static name: string
|
||||
declare static testValue: (
|
||||
{ _tag: "type1", value: string } |
|
||||
{ _tag: "type2", value: number }
|
||||
)
|
||||
|
||||
abstract name: string
|
||||
|
||||
declare createdAt: Date
|
||||
@@ -84,14 +90,28 @@ abstract class Test1 {
|
||||
)
|
||||
}
|
||||
|
||||
class Test2 {
|
||||
return Test1
|
||||
})
|
||||
|
||||
const Test2 = trait(Super => {
|
||||
abstract class Test2 extends Super {
|
||||
declare readonly status: { _tag: "active", activeSince: Date, expiresAt?: Date }
|
||||
}
|
||||
|
||||
class Test3 {
|
||||
return Test2
|
||||
})
|
||||
|
||||
const Test3 = trait(Super => {
|
||||
abstract class Test3 extends Super {
|
||||
declare static testValue: { _tag: "type2", value: number }
|
||||
declare lol: 10n
|
||||
}
|
||||
|
||||
return Test3
|
||||
})
|
||||
|
||||
const TestObjectProto = expresses(Test1, Test2, Test3)
|
||||
TestObjectProto.testValue
|
||||
|
||||
type CleanupInheritanceTreeProperties<Classes extends readonly AbstractClass<any>[]> = (
|
||||
MergeInheritanceTree<
|
||||
|
||||
Reference in New Issue
Block a user