diff --git a/src/tests.ts b/src/tests.ts index 2930e45..d61e2d9 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -4,8 +4,8 @@ import { ClassesInstances, MergeInheritanceTree } from "./util" const Identifiable = () => - 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 = () => }) const ImplementsIdentifiable = (defaultID: ID) => - trait(Parent => { + trait(Super => { abstract class ImplementsIdentifiable extends extendsAndExpresses( - Parent, + Super, Identifiable(), ) { id: ID = defaultID @@ -39,8 +39,8 @@ const ImplementsIdentifiable = (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,26 +72,46 @@ console.log(user1) console.log(user1.equals(user1)) -abstract class Test1 { - declare static name: string - abstract name: string +const Test1 = trait(Super => { + abstract class Test1 extends Super { + declare static name: string + declare static testValue: ( + { _tag: "type1", value: string } | + { _tag: "type2", value: number } + ) - declare createdAt: Date - declare readonly status: ( - { _tag: "awaitingPayment" } | - { _tag: "active", activeSince: Date, expiresAt?: Date } | - { _tag: "expired", expiredSince: Date } - ) -} + abstract name: string -class Test2 { - declare readonly status: { _tag: "active", activeSince: Date, expiresAt?: Date } -} + declare createdAt: Date + declare readonly status: ( + { _tag: "awaitingPayment" } | + { _tag: "active", activeSince: Date, expiresAt?: Date } | + { _tag: "expired", expiredSince: Date } + ) + } -class Test3 { - declare lol: 10n -} + return Test1 +}) +const Test2 = trait(Super => { + abstract class Test2 extends Super { + declare readonly status: { _tag: "active", activeSince: Date, expiresAt?: Date } + } + + 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[]> = ( MergeInheritanceTree<