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