This commit is contained in:
36
src/tests.ts
36
src/tests.ts
@@ -18,7 +18,9 @@ const PrintsHelloOnNew = trait
|
||||
type PrintsHelloOnNewClass = TraitClass<typeof PrintsHelloOnNew>
|
||||
|
||||
const Identifiable = <ID>() => trait
|
||||
.abstract<{ readonly id: ID }>()
|
||||
.abstract(Super => class extends Super {
|
||||
declare readonly id: ID
|
||||
})
|
||||
.implement(Super => class Identifiable extends Super {
|
||||
equals(el: Identifiable) {
|
||||
return this.id === el.id
|
||||
@@ -27,17 +29,9 @@ const Identifiable = <ID>() => trait
|
||||
.build()
|
||||
|
||||
const StatefulSubscription = trait
|
||||
// .abstract<{
|
||||
// readonly isStatefulSubscription: true
|
||||
// readonly status: (
|
||||
// { _tag: "awaitingPayment" } |
|
||||
// { _tag: "active", activeSince: Date, expiresAt?: Date } |
|
||||
// { _tag: "expired", expiredSince: Date }
|
||||
// )
|
||||
// }>()
|
||||
.extendAbstract(Super => class StatefulSubscriptionAbstract extends Super {
|
||||
readonly isStatefulSubscription!: true
|
||||
readonly status!: (
|
||||
.abstract(Super => class extends Super {
|
||||
declare readonly isStatefulSubscription: true
|
||||
declare readonly status: (
|
||||
{ _tag: "awaitingPayment" } |
|
||||
{ _tag: "active", activeSince: Date, expiresAt?: Date } |
|
||||
{ _tag: "expired", expiredSince: Date }
|
||||
@@ -51,9 +45,9 @@ const ActiveStatefulSubscription = expression
|
||||
.expresses(StatefulSubscription)
|
||||
.build()
|
||||
.subtrait()
|
||||
.extendAbstract(Super => class extends Super {
|
||||
readonly isActiveStatefulSubscription!: true
|
||||
readonly status!: { _tag: "active", activeSince: Date, expiresAt?: Date }
|
||||
.abstract(Super => class extends Super {
|
||||
declare readonly isActiveStatefulSubscription: true
|
||||
declare readonly status: { _tag: "active", activeSince: Date, expiresAt?: Date }
|
||||
})
|
||||
.build()
|
||||
|
||||
@@ -86,15 +80,3 @@ class User extends exp.extends implements Implements<typeof exp> {
|
||||
}
|
||||
|
||||
console.log(new User())
|
||||
|
||||
|
||||
type MyTuple = [
|
||||
{ values: { gneugneu: string } },
|
||||
{ values: { ataoy: "issou" } },
|
||||
]
|
||||
|
||||
type MapToValues<T extends { values: object }[]> = {
|
||||
[K in keyof T]: T[K]["values"]
|
||||
}
|
||||
|
||||
type T = MapToValues<MyTuple>
|
||||
|
||||
Reference in New Issue
Block a user